Я создаю команду API RESTful для деактивации записи пользователя. Кошерно ли использовать DELETE для этого или должно быть PUT, так как запись обновляется до состояния «деактивирована»? Или это просто вопрос вкуса?Можно ли использовать DELETE для дезактивации записи?
ответ
Семантика DELETE
означает, что вы фактически избавляетесь от объекта. То, что вы делаете здесь, похоже на изменение состояния объекта. В этом случае более подходящим будет PUT
или PATCH
.
Лучше придерживаться семантики единого интерфейса, который вы используете (в данном случае, HTTP-глаголов). Если они соответствуют тому, что вы на самом деле делаете в своем приложении, тогда возникает меньше путаницы. Кроме того, что, если позже вы решите, что DELETE
должен фактически удалить запись, а не просто отметить ее «неактивным»? Теперь вы изменили поведение своего API. Кроме того, если вы используете DELETE
, вы по существу следуете принципу наименьшего удивления, который хорош для API. Лучше иметь DELETE
на самом деле сделать удаление, а не просто притворяться.
С другой стороны, это прекрасная возможность удалить запись из одного места и переместить ее в другое место (например, из одной таблицы в другую), если окажется, что вы обязаны хранить данные в исторических целях. В этом случае эта запись должна просто оставаться недоступной для будущих операций (то есть, GET
на ресурсе должна вернуть).
Если после операции деактивации ресурс недоступен для конечного пользователя больше через «GET», если он не повторно активирован, я не вижу проблемы с использованием «УДАЛИТЬ». В противном случае «PUT» является более подходящим.
Если ресурс по URL-адресу, который вы отправляете, DELETE
запрос больше не доступен при наличии этого URI, тогда DELETE
подходит. Если он остается там, но меняет состояние, то это не так.
например. это нормально (ресурс в/друзей/боб уходит, новый ресурс создан в/formerfriends/боб в этом процессе, но это случайно):
GET /friends/bob => 200 OK
GET /formerfriends/bob => 404 Not Found
DELETE /friends/bob => 204 No Content
GET /friends/bob => 410 Gone
GET /formerfriends/bob => 200 OK
это не так:
GET /friends/bob => 200 OK {"status"="friend"}
DELETE /friends/bob => 204 No Content
GET /friends/bob => 200 OK {"status"="formerfriend"}
что-то подобное, что было бы лучше обращаться с PUT
или PATCH
:
GET /friends/bob => 200 OK {"status"="friend"}
PATCH /friends/bob {"status"="formerfriend"} => 204 No Content
GET /friends/bob => 200 OK {"status"="formerfriend"}
- 1. Можно ли использовать анонимные записи
- 2. Можно ли/рекомендуется использовать TStringList внутри записи?
- 3. Можно ли использовать запись как элемент записи
- 4. Можно ли использовать предложение where в Zends delete()?
- 5. Можно ли использовать свойства командной строки NAnt для чтения-записи?
- 6. Можно ли использовать javascript для записи в файл?
- 7. Можно ли использовать Input :: all() для создания новой записи?
- 8. Можно ли использовать java-скрипт через браузер для записи файла
- 9. Предотвращение дезактивации Outlook 2013 Addin
- 10. DELETE записи без ассоциированных
- 11. Можно ли перенаправить методы `PUT`,` DELETE`?
- 12. Можно ли вызвать delete в этих деструкторах?
- 13. Как остановить Avaudiosession от дезактивации?
- 14. Ошибка Sharepoint при дезактивации функций
- 15. Azure Search Delete - Можно ли указать условия для удаления?
- 16. Можно ли использовать php для записи в таблицах и использовать datatable для оптимизации таблиц?
- 17. Можно ли запрашивать записи log4net?
- 18. Можно ли использовать записи YAML подмножества записей в одном файле?
- 19. Код дезактивации функции в решении для песочницы
- 20. Можно ли использовать имя записи в качестве параметра в Erlang
- 21. UIMoviePlayerController ... Можно ли использовать?
- 22. Можно ли использовать iframe?
- 23. Можно ли использовать «eval»?
- 24. Можно ли использовать cstdarg?
- 25. Можно ли использовать UIViewAlertForUnsatisfiableConstraints?
- 26. Можно ли использовать ComputedProperty?
- 27. Можно ли использовать Capistrano?
- 28. Можно ли использовать AngularJS?
- 29. Должен ли я использовать правило CASCADE DELETE?
- 30. Можно ли использовать подзапросы?
Просто небольшой добавкой: Согласно [RFC-2616] (http://tools.ietf.org/html/rfc2616#section-9.7) сервер также может перемещать ресурс в недоступное место. В конце 'GET' на удаленном ресурсе должен вернуть' 404' – prehfeldt
@prehfeldt Исправить! Я упомянул об этом в моем последнем абзаце. Добавлен бит о '404' для дополнительного уточнения. –