web-dev-qa-db-fra.com

La méthode PATCH doit-elle renvoyer tous les champs de la ressource dans le corps de la réponse?

La méthode PATCH doit-elle renvoyer tous les champs de la ressource dans le corps de la réponse?
Ou devrait-il renvoyer uniquement les champs mis à jour?

Je lis ça

Par exemple, s'il ne renvoie que des champs mis à jour, l'utilisateur peut savoir quels champs ont été mis à jour sur le serveur, tandis que l'utilisateur met à jour certains champs.

**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
}
11
Nigiri

Normalement, cela devrait être géré par négociation de contenu . En d'autres termes, le client demande à une représentation spécifique s'il en a besoin. La demande ressemblerait à ceci:

PATCH /user/123
Content-Type: application/merge-patch+json
Accept: application/vnd.company.user+json
...

Dans ce cas, le client exprime le souhait d’une réponse user complète. Ou cela pourrait faire:

PATCH /user/123
Content-Type: application/merge-patch+json
Accept: application/vnd.company.object-fragment+json
...

demander une représentation fragmentaire générique d'un objet.

Vous n'êtes pas obligé de mettre en œuvre les deux si vous ne le souhaitez pas. Dans ce cas, il vous suffit d'utiliser votre cas d'utilisation et de répondre avec 406 Not Acceptable à media-types que vous ne supportez pas pour le moment.

13

La spécification de PATCH ne l'exige pas.

Si vous souhaitez le contrôler, vous pouvez consulter https://greenbytes.de/tech/webdav/rfc7240.html#return pour trouver l'inspiration.

3
Julian Reschke

Je ne pense pas que la spécification REST (d'ailleurs je pense que vous devez regarder RFC 6902 pour cela) impose des règles strictes à ce sujet (ce que vous devriez retourner). Je préfère retourner la ressource entière afin que le client puisse l'utiliser comme bon lui semble. Théoriquement, le client lui-même sait ce qui a été corrigé (du moins quelle était la demande). Obtenir la confirmation du serveur peut ne pas être trivial (d'autant plus que PATCH est principalement utilisé pour les collections), ou du moins ne vaut pas la peine.

0