Почему включение глагола действия в URI в реализацию REST нарушает протокол? - PullRequest
8 голосов
/ 01 февраля 2010

Я считаю необходимым понять, почему включение глаголов действия в URI нарушает протокол REST для синтаксиса URI? Когда я читаю следующую статью, я чувствую, что слишком много людей делают слишком много шума о глаголах, и что они должны делать больше шума о типах контента:

RestWiki: минимальные методы

В идеальном мире клиентские браузеры будут поддерживать GET, POST, PUT и DELETE для операций запроса. Однако поддерживаются только GET и POST, что означает, что мы застряли, пытаясь определить операции, которые должны быть PUT и DELETE, с помощью общих глаголов действия в URL, таких как просмотр, создание, редактирование и удаление.

Как это нарушает дух архитектурных принципов REST, и с каким препятствием вы сталкиваетесь, вставляя что-то вроде "delete" в свой URL вместо использования "delete"?

Ответы [ 2 ]

15 голосов
/ 01 февраля 2010

Единственная действительная причина для руководства по URI - поощрять правильное использование глаголов REST.Если запрос выполняет действие, которое соответствует ожиданиям клиента в соответствии со стандартами HTTP, тогда на самом деле не имеет значения, что содержит URL-адрес.

Имена URL-адресов на основе существительных делают естественным создание поведения, которое согласуется сцелевое назначение GET, PUT, POST и DELETE.

Когда вы помещаете глаголы в URL, это может привести к путанице, потому что часто глагол http будет иметь поведение, противоречащее глаголу в URL.Правила REST гласят, что вы должны уважать HTTP-глагол, но обычно URL-адрес является более описательным, поэтому он может вводить в заблуждение.

Тот факт, что браузеры поддерживают только подмножество HTTP-глаголов, на самом деле не имеет значения, потому что даже если у вас естьполный доступ ко всем HTTP-глаголам, вам все еще нужно иметь возможность моделировать другие глаголы, такие как печать, закрытие, подтверждение, отмена.

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

Создание ваших URL-адресов, относящихся к существительным, не является ограничением REST, оно заключается в поощрении людей попадать в пропасть успеха.

3 голосов
/ 01 февраля 2010

REST - это не протокол, а стиль. Таким образом, вы можете делать все, что соответствует вашим требованиям.

Глаголы HTTP предпочтительнее, если это возможно, так как они являются частью протокола HTTP и как таковой стандарт. Он также позволяет использовать существующие уровни безопасности и кэширования на стандартном веб-сервере без необходимости написания промежуточного программного обеспечения на заказ.

REST предлагает использовать HTTP, а не добавлять уровни абстракции, как это делают SOAP, RPC или CORBA. Добавление дополнительных глаголов или добавление их в URL можно рассматривать, хотя и как упрощенную абстракцию.

Однако, как вы правильно заметили, они не всегда поддерживаются браузерами или некоторыми версиями Flash. Поэтому может быть необходимо поместить их в URL в реальном мире, если вы осуществляете доступ со стороны клиента.

Вы должны внимательно посмотреть на это, поскольку могут возникнуть серьезные проблемы с безопасностью при выполнении DELETE / PUT над URL.

Я бы предположил, что глаголы GET POST PUT и DELETE подходят практически для любых нужд. Вам не нужно никаких новых глаголов или кодов ответов, так как они предназначены для общего использования. Добавьте дополнительную информацию в данные запроса и ответа.

Проверьте эту статью SO для получения дополнительной информации: Понимание REST: глаголы, коды ошибок и аутентификация

...