Примечание. Я считаю, что здесь POST означает "создать", а PUT означает "обновить", как это делает GitHub. Здесь не место для аргументов в пользу POST или PUT.

У меня есть ресурс company и действие assign. Мне интересно, как перевести это поведение в мой REST API.

Я подумал о чем-то вроде:

PUT /company/:id/assign
user_id: 5

Что если я хочу отменить назначение этого пользователя?

  • Должен ли я использовать логическое значение в качестве параметра?
  • Должен ли я использовать действие unassign?
  • Должен ли я использовать другой HTTP-глагол?

В последней версии GitHub API я увидел, как пометить суть:

PUT /gists/:id/star

Почему бы и нет, но как удалить суть:

DELETE /gists/:id/star

Мне это кажется довольно странным. Вы обновляете действие над ресурсом и удаляете его. Странный. Я мог понять, стоит ли POST вместо PUT.

POST /gists/:id/star и DELETE /gists/:id/star мне кажутся более логичными. Что вы думаете?

РЕДАКТИРОВАТЬ: Я буду работать с POST и DELETE. Но поскольку отправить данные с помощью метода DELETE невозможно, я должен передать user_id в URL:

POST /company/:id/assign/:user_id
DELETE /company/:id/assign/:user_id 
7
Syl 27 Авг 2014 в 12:24

1 ответ

Лучший ответ

Использование логического значения не совсем понятно. Я мог бы рассматривать это как неочевидный аргумент. Учтите, что чем более очевидна интерпретация API, тем лучше ваш синтаксис.

Наконец, лучший вариант, который вы можете выбрать, - это использование метода DELETE. Когда вы назначаете пользователя компании, вы создаете связь. Когда вы хотите отменить назначение, вы удаляете отношение.

2
MathKimRobin 27 Авг 2014 в 12:32
+1, POST /assignments {user: id, company: id} -> 201 id и все. Назначить - это имя операции, а не имя ресурса ...
 – 
inf3rno
27 Авг 2014 в 14:10