Должен ли метод 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 to media-types вы не поддерживаете на данный момент.


спецификация патча не требует этого.

Если вы хотите контролировать его, вы можете посмотреть наhttps://greenbytes.de/tech/webdav/rfc7240.html#return для вдохновения.


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