Как РАЗМЕСТИТЬ несколько ресурсов через REST API

#json #api #rest #http

#json #API #rest #http

Вопрос:

Я пытаюсь найти наилучший способ добавления нескольких пользователей в группу через REST API.

Прямо сейчас я думаю, что это лучший способ добавления одного пользователя за раз:

PUT /groups/123/{userID}

Затем, чтобы удалить пользователя из группы:

DELETE /groups/123/{userID}

Но как мне добавить несколько пользователей в группу одновременно? Будет ли это лучшим способом?

PUT /groups/123

Тело содержимого в виде массива:

 [
  "user1",
  "user2",
  "user3"
]
 

… и чтобы удалить пользователей из группы, я бы сделал то же самое с помощью DELETE запроса.

Есть ли что-то «неправильное» в этой настройке, или есть ли лучший, более «стандартный для отрасли» способ сделать это?

Ответ №1:

Как РАЗМЕСТИТЬ несколько ресурсов через REST API

Вы этого не делаете — каждый запрос в HTTP имеет один и только один целевой ресурс; семантика запроса PUT заключается в том, что тело сообщения запроса является заменяющим представлением для ресурса.


Ресурсы — это обобщения документов.

Вполне разумно иметь документ, представляющий членов некоторой группы.

 PUT /groups/123

[
  "user1",
  "user2",
  "user3"
]
 

Этот запрос означает «замените вашу копию /groups/123 на эту копию». Это чисто команда редактирования документа.

Полезная работа, например, фактическое внесение изменений в список участников основной группы, является побочным эффектом того, что ваша копия документа выглядит как предоставленная копия. См. Webber 2011.

В этом стиле «удаление» пользователя из группы будет выглядеть как еще одно редактирование документа /groups/123

 PUT /groups/123

[
  "user1",
  "user3"
]
 

Конечно, семантика удаленного создания не требуется; вместо этого вы могли бы сделать:

 POST /groups/123

Please remove user1
 

или

 POST /groups/123

action=addUseramp;id=user4
 

чтобы удалить пользователей из группы, я бы сделал то же самое с помощью запроса на УДАЛЕНИЕ

Осторожно — УДАЛЕНИЕ (например, PUT) означает что-то конкретное в HTTP, и это может быть не то, что вы имеете в виду.

Относительно небольшое количество ресурсов допускает метод УДАЛЕНИЯ

Семантика DELETE прочно связана с передачей документов через сетевой домен, а не с доменом «управление пользователями и группами».