Должен ли метод PATCH возвращать все поля ресурса в теле ответа?
Должен ли метод PATCH возвращать все поля ресурса в теле ответа?
Или он должен возвращать только обновленные поля?
Я читаю это
Например, если он возвращает только обновленные поля, пользователь может знать, какие поля были обновлены на сервере, а пользователь обновил некоторые поля.
**Users resource representations**
name: string
age: number
createdon: date
modifiedon: date
PATCH /users/{userId}
Request body
{
name: 'changedname',
}
Response body Case1
{
name: 'changedname',
age: 20,
createdon: 2016-01-01,
modifiedon: 2016-06-09
}
Response body Case2
{
name: 'changedname',
modifiedon: 2016-06-09
}
3 ответа
Обычно это должно быть обработано путем согласования контента. Другими словами, клиент запрашивает конкретное представление, если оно необходимо. Запрос будет выглядеть так:
PATCH /user/123
Content-Type: application/merge-patch+json
Accept: application/vnd.company.user+json
...
В этом случае клиент выражает, что он хочет полный user
представление в качестве ответа. Или это может сделать:
PATCH /user/123
Content-Type: application/merge-patch+json
Accept: application/vnd.company.object-fragment+json
...
попросить общее представление фрагмента некоторого объекта.
Вам не нужно реализовывать оба, если вы не хотите, в этом случае вы просто делаете ваш вариант использования и отвечаете 406 Not Acceptable
в media-types
Вы не поддерживаете на данный момент.
Спецификация PATCH не требует этого.
Если вы хотите контролировать это, вы можете обратиться к https://greenbytes.de/tech/webdav/rfc7240.html для вдохновения.
Я не думаю, что спецификация REST (между прочим, я думаю, что для этого нужно обратиться к RFC 6902) предписывает какие-либо строгие правила (то, что вы должны возвращать). Я бы лучше вернул весь ресурс, чтобы клиент мог использовать его так, как ему нужно. Теоретически, клиент сам знает, что было исправлено (по крайней мере, запрос был). Получение подтверждения от сервера может быть нетривиальным (особенно если учесть, что PATCH чаще всего используется для коллекций) или, по крайней мере, не стоит.