Какой метод HTTP использовать в этих случаях RESTFUL? - PullRequest
2 голосов
/ 15 июля 2009

Надеюсь, кто-нибудь поможет мне в этом.

Рассмотрим следующие варианты использования:

  1. Добавление роли пользователю
  2. Удалить / отозвать роль у пользователя

Интерфейс в систему ОТДЫХ.

Когда добавляет роль, используется следующий URL:

PUT /user/{userId}/role/{roleId}

Когда удаляет / отзывает роль у пользователя, используется следующий URL:

DELETE /user/{userId}/role/{roleId}

Мне кажется, что оба этих RESTFUL-вызова должны быть PUT, а URL-адреса также должны быть изменены:

PUT /user/{userId}/register/role/{roleId}
PUT /user/{userId}/revoke/role/{roleId}

Мысли

Ответы [ 5 ]

2 голосов
/ 15 июля 2009

Создание должно быть выполнено с использованием POST, поэтому создание новой роли для пользователя должно быть POST, а не PUT, я бы сказал. Это зависит от того, считаете ли вы добавление роли созданием роли (в данном случае это POST) или модификацией пользователя (тогда это PUT). То, как вы сформулировали URL-адрес, подсказывает мне первое, поэтому я остановлюсь на POST.

Тот же аргумент применяется к отзыву роли. Это модификация пользователя или удаление роли? Если первое, то я бы сказал PUT, если второе, то УДАЛИТЬ.

0 голосов
/ 04 декабря 2012

Старый вопрос, но URL не должны быть изменены, как в OP. URL-адрес RESTful не должен включать глаголы (register и revoke) . Глаголы указывают на гибридную архитектуру RPC или REST-RPC.

Другие хорошо ответили на вопрос выбора глагола, но мой 2p / 2c: -

POST должен быть для создания новых ресурсов, PUT для обновления существующих

0 голосов
/ 15 июля 2009

Я бы предложил пойти с DELETE для второго варианта. Пока вы находите ресурс уникальным образом, вы должны пытаться рассматривать операцию как выполненную на этом ресурсе. Так что в вашем случае URL, по которому вы действуете, принадлежит Ролю Таким образом, вы удаляете роль из-под пользователя. Вот как я это вижу, и это облегчает чтение - МЕТОД РЕСУРСА.

А также, если вы выполняете PUT, обычно вы заменяете RESOURCE, что означает отправку всего ресурса на сервер.

0 голосов
/ 15 июля 2009

Первое решение, которое вы представили, является спокойным, поскольку вы постоянно используете глаголы Http. Второе решение не согласовано, потому что вы используете PUT для удаления чего-либо.

Если бы вы создали ресурс для представления транзакции регистрации и отзыва, вы могли бы сделать следующее:

POST /registrations

POST /revokations

Теперь, в случае отзыва, становится более понятным, что вы создаете ресурс (транзакция отзыва), который имеет побочный эффект удаления роли у пользователя. Недостатком является то, что теперь вам нужно тело POST, содержащее пользователя и роль, на которую влияет транзакция.

Ваше первое решение, безусловно, лучшее на мой взгляд.

0 голосов
/ 15 июля 2009

Я считаю, что DELETE обычно предпочтительнее с точки зрения RESTful. Вы бы использовали PUT, если работаете с журналом транзакций - вы не просто удаляете какое-то разрешение, вы добавляете транзакцию, удаляя разрешение в ваш журнал транзакций, что также означает, что каждый раз, когда вы это делаете, вы получаете уникальный идентификатор, представляющий действие.

...