Если мой веб-сервис позволяет клиентам ** удалять **, используя ** POST ** запросы, все еще считается RESTful? - PullRequest
2 голосов
/ 11 июля 2011

Если мой веб-сервис позволяет клиентам удалять с использованием POST запросов, все еще считается RESTful?

Ответы [ 5 ]

2 голосов
/ 11 июля 2011

Я не думаю, что вопрос должен заключаться в том, является ли API "RESTful", потому что это стало модным словом. Более важный вопрос заключается в том, является ли это хорошим использованием протокола HTTP, который определен в RFC 2616. Вот соответствующий раздел: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html.

В нем говорится «Метод POST используется для запроса, чтобы исходный сервер принял объект, заключенный в запросе, в качестве нового подчиненного ресурса, идентифицируемого Request-URI в строке запроса». POST обычно используются для создания нового элемента в коллекции или аннотирования существующих ресурсов. Хотя аннотирование чего-либо путем его удаления на самом деле не запрещено, и нет никаких проблем с безопасностью и идемпотентностью, которые нужно нарушать, удаление POST не использует HTTP, как было задумано.

Тем не менее, если вы сделаете POST для изменения существующего ресурса, «установив флаг удаления» внутри ресурса, вы будете следовать современной практике API RESTful. Но чтобы полностью ударить это? Нет, для этого и нужен HTTP DELETE.

2 голосов
/ 11 июля 2011

Строго говоря, я думаю, что это не так, хотя я все равно считаю это RESTful. Бывают случаи, когда невозможно использовать все глаголы HTTP, поэтому многие API-интерфейсы REST разрешают другие действия через POST или GET.

0 голосов
/ 11 июля 2011

Нет, это не RESTful, как задумано для HTTP. Чтобы позволить клиентам, которые не поддерживают DELETE или PUT, взаимодействовать с ресурсами, предназначенными для их поддержки, является использование настраиваемого заголовка, который указывает, какую операцию выполнить. Затем создайте слой в вашей среде, проверьте этот заголовок и вызовите правильный метод в коде ресурса. Подход, который я видел наиболее широко используемый, заключается в использовании заголовка с именем X-HTTP-Method-Override . Если клиент не может манипулировать заголовками HTTP, то тот же подход (событие с тем же именем) может использоваться с параметром запроса.

0 голосов
/ 11 июля 2011

Короткий ответ - нет, хотя с практической точки зрения клиентам было бы легче реализовать, особенно если они неискушены и не знают, как сделать УДАЛЕНИЕ.ваш веб-сервис, поэтому вы должны делать все, что лучше всего соответствует потребностям вашего бизнеса.Полная реализация REST гораздо менее важна, чем отличная клиентская документация о том, как работать с вашим API.

0 голосов
/ 11 июля 2011

Поскольку официального стандарта RESTful не существует, все в порядке, если метод 'override' явно передается в параметре, например, метод = DELETE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...