Действия против CRUD в REST - PullRequest
8 голосов
/ 14 июля 2011

Уместно ли выполнять действия с REST, кроме простого создания (POST), чтения (GET), обновления (PUT) и удаления (DELETE)?Я новичок во всей теологии RESTful, так что терпите меня, но как мне сделать следующее:

  • У меня есть веб-сервис, который должен общаться с другим веб-сервисом.Веб-сервису A необходимо «зарезервировать» объект в веб-сервисе B. Срок действия этого объекта истек, но при необходимости его можно удалить немедленно.По сути, это прославленная система разрешений, которая требует, чтобы веб-службы зарезервировали место на веб-службе B, прежде чем предпринимать какие-либо действия.

Первоначально я думал, что: 1. включить аутентификацию какого-либо рода, 2. на стороне сервера.в ответ на вызов GET, зарезервировать место и вернуть результат, и 3. обеспечить немедленное «снятие резервирования» объекта с помощью вызова DELETE.Это все еще RESTful?

Ответы [ 3 ]

3 голосов
/ 14 июля 2011

Да, можно выполнять действия с отдыхом. Важно то, что эти действия должны основываться на представлении, которым вы обмениваетесь.

Если вы думаете о том, как работает сеть (через браузер), вы делаете это постоянно: вы получаете HTML-форму, которая позволяет вам выбрать ряд действий, которые вы можете выполнить. Затем вы отправляете форму (обычно через POST) и действие выполняется.

Хорошо иметь возможность использовать DELETE через программный клиент (который не поддерживаются не-AJAX-запросами в браузерах), но общий подход системы RESTful должен быть очень похож на тот, который вы найдете для веб-сайтов (т. е. основное внимание следует уделять представлениям: эквивалентам веб-страниц в вашей системе).

GET не должно иметь побочных эффектов, поэтому не используйте GET, чтобы сделать само резервирование, используйте что-то вроде POST.

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

Нет - вряд ли будет успокоительным

Из вашего описания ...

2.в ответе сервера на вызов GET зарезервируйте место и верните результат

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

Вы действительно должны учитывать, что Reservation является ресурсом и должно быть создано с помощью POST в контейнере резервирования, который будет возвращать URI нового ресурса в заголовке Location HTTP.ответ.Этот UrI может быть использован Get для возврата ресурса и обновлен с помощью PUT

Post должен использоваться для расширения существующего ресурса и Put для замены состояния ресурса. В вашем случаерассмотрим публикацию, которая обновляет список резервирований и возвращает URI нового ресурса (не только я).Put может использоваться для изменения состояния, связанного с ресурсом, идентифицированным UR

1 голос
/ 14 июля 2011

Вы на правильном пути, но ваше резервирование объекта должно быть с PUT; вы ставите резервирование на объект, т.е. меняете базовый объект.

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

...