2016-10-25 6 views
1

Как указано в принятом ответе в Which HTTP method should Login and Logout Actions use in a "RESTful" setup, рекомендуется использовать HTTP POST (= create) для входа в веб-службу RESTful (например, /webservice/login/). POST не является ни идемпотентным, ни безопасным (http://restcookbook.com/HTTP%20Methods/idempotency/).HTTP RESTful Выход из Webservice: что является правильной или лучшей практикой - POST или DELETE?

Однако как насчет выхода из системы (например,/webservice/logout /). Должен ли я использовать POST или DELETE?

DELETE is idempotent - независимо от того, существует ли на сервере сеанс (или что-то еще), или нет, он удаляется, а ответ с веб-сервера - это ОК, без какого-либо дополнительного содержимого. Мне это кажется естественным.

POST не является идемпотентным, а некоторые плакаты с подобными вопросами рекомендуют POST для выхода из системы REST. Я могу думать о двух возможных причин:

  1. если сеанс не существует сервер может возвращать 404 - в успешный ответ в противном случае (два вида ответа)

  2. выход из системы может вызвать, например, обновление базы данных, содержащее выход из системы информации для пользователя и т.п., и, следовательно, операции выхода из системы будет не идемпотентного

Так какой HTTP метод будет лучше для выхода из системы - POST или DELETE?

ответ

5

Как правило, ваш веб-сервер не должен иметь сеанса или выхода из системы. Служба REST должна быть апатридом и информацией аутентификации, отправляемой вместе с каждым запросом.

Однако, если вы аутентификация пользователя с каким-то знаком, и вы хотите явно указать сервер истекает маркер, и вы хотите выразить это в RESTful образом, это будет иметь смысл для меня, что:

  • Ваши лексем представлены в адресах, как/сессии/[ID]
  • вы выдать DELETE по этому URL

Это не имеет смысла для меня, что у вас есть URL, как /webservice/logout/, который вы удаляете.

Выдача запроса POST с некоторой информацией для выдачи «выхода» - это разумный подход к API-интерфейсу HTTP API, но это не REST.

+0

URL-адрес был плохим примером, мы используем токены сеанса в нашем приложении, однако, если я реализую API-интерфейс HTTP в соответствии с принципами REST, я думаю, что я должен использовать DELETE. – Blackbam

+0

Да, но это определенно случай, когда вам следует задаться вопросом, какую выгоду предлагает REST здесь? – Evert