Является ли семантически некорректным использование PUT для операции «пометить как избранное»? - PullRequest
0 голосов
/ 06 марта 2019

В моем приложении у меня есть 2 типа: user и file. file можно «пометить как избранное» с помощью user, чтобы обеспечить легкий доступ. В настоящее время я использую метод PUT, когда «одобряю» file, например:

PUT /user/fileList/
Body: { fileId: 'xxxx' }

Затем сервер добавит указанный fileId в запись пользователя (авторизация обрабатывается отдельно).

Является ли это использование PUT семантически неправильным или иным образом плохой практикой? Есть ли лучший способ реализовать этот шаблон? Мне кажется, что это неоптимальное решение (по крайней мере семантическое).

1 Ответ

1 голос
/ 07 марта 2019

Нет. Github делает это в своем API для главных ролей, например.

https://developer.github.com/v3/activity/starring/#star-a-repository

Соответствующее различие между PUT и POST здесь заключается в том, что клиенты должны использовать PUT, когда они знают URL-адрес, где должен находиться ресурс, например, /user/starred/:owner/:repo, и клиенты должны использовать POST, когда они не знают или не должны знать, где должен быть создан ресурс, например POST /users, который должен вернуть ссылку на /users/138

Цитировать из RFC 2616, который определяет HTTP 1.1:

Метод PUT запрашивает, чтобы вложенный объект был сохранен под предоставленным Request-URI ... Если Request-URI не указывает на существующий ресурс, и этот URI является запрашивающий пользовательский агент может быть определен как новый ресурс, сервер-источник может создать ресурс с этим URI.

Метод POST используется для запроса, чтобы исходный сервер принял объект, включенный в запрос, как новый подчиненный ресурса, идентифицируемый Request-URI в строке запроса.

Так что в вашем конкретном случае я бы поставил fileId где-то в URL (например, /user/fileList/:fileId, а не в теле, поскольку клиент знает, куда должен идти ресурс.

...