Честно говоря, ответ зависит от контекста. REST и RESTful имеют значения в зависимости от того, какой язык или среду вы используете или чего вы пытаетесь достичь. Поскольку вы отметили свой вопрос в разделе «веб-сервисы», я отвечу в контексте веб-сервисов RESTful, которые по-прежнему относятся к широкой категории.
Веб-службы RESTful могут означать что угодно, от строгой интерпретации REST, где все действия выполняются строго "RESTful", до протокола, который представляет собой простой XML, то есть не SOAP или XMLRPC. В последнем случае это является неправильным: такой протокол REST на самом деле является «простым старым XML» (или «POX») протоколом . Хотя протоколы REST обычно используют XML и, как таковые, являются протоколами POX, это не обязательно должно иметь место, и обратное неверно (просто потому, что протокол, использующий XML, не делает его RESTful).
Без лишних слов настоящий RESTful API состоит из действий, выполняемых над объектами, которые представлены используемым методом HTTP и URL-адресом этого объекта. Действия касаются данных, а не того, что делает метод. Например, действия CRUD (создание, чтение, обновление и удаление) могут сопоставляться с определенным набором URL-адресов и действий. Допустим, вы взаимодействуете с API фотографий.
- Чтобы создать фотографию, вы должны отправить данные с помощью запроса POST в / photos. Это позволит вам узнать, где находится фотография через заголовок Location, например / фотографии / 12345
- Для просмотра фотографии вы должны использовать GET / photos / 12345
- Чтобы обновить фотографию, вы должны отправить данные с помощью запроса PUT на /photos/12345.
- Чтобы удалить фотографию, вы должны использовать DELETE / photos / 12345
- Чтобы получить список фотографий, вы должны использовать GET /photos.
Могут быть реализованы другие действия, например, возможность копировать фотографии с помощью запроса COPY.
Таким образом, метод HTTP, который вы используете, сопоставляется непосредственно с целью вашего вызова, а не отправляет действие, которое вы хотите выполнить, как часть API. Для сравнения, API без RESTful может использовать гораздо больше URL и использовать только действия GET и POST. Итак, в этом примере вы можете увидеть:
- Чтобы создать фотографию, отправьте POST в / photos / create
- Для просмотра фотографии отправьте GET в / photos / view / 12345
- Чтобы обновить фотографию, отправьте POST в / photos / update / 12345
- Чтобы удалить фотографию, отправьте GET в / photos / delete / 12345
- Чтобы получить список фотографий, отправьте GET в / photos / list
Вы заметите, как в этом случае URL-адреса различаются, а методы выбираются только из технической необходимости: для отправки данных вы должны использовать POST, в то время как все другие запросы используют GET.