wake-up-neo.com

Soll die PATCH-Methode alle Felder der Ressource im Antworttext zurückgeben?

Soll die PATCH-Methode alle Felder der Ressource im Antworttext zurückgeben?
Oder sollte es nur aktualisierte Felder zurückgeben?

Ich lese das

Wenn beispielsweise nur aktualisierte Felder zurückgegeben werden, kann der Benutzer wissen, welche Felder auf dem Server aktualisiert wurden, während der Benutzer einige Felder aktualisiert hat.

**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

Normalerweise sollte dies durch Inhaltsverhandlungen gehandhabt werden. Mit anderen Worten, der Client fragt nach einer bestimmten Repräsentation, falls diese benötigt wird. Die Anfrage würde so aussehen:

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

In diesem Fall drückt der Client aus, dass er eine vollständige user-Darstellung als Antwort wünscht. Oder es könnte tun:

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

um eine generische Fragmentdarstellung eines Objekts zu bitten.

Sie müssen nicht beides implementieren, wenn Sie dies nicht möchten. In diesem Fall führen Sie einfach Ihren Anwendungsfall aus und antworten mit 406 Not Acceptable auf media-types, die Sie im Moment nicht unterstützen.

13

Die Spezifikation von PATCH gibt dies nicht vor.

Wenn Sie es steuern möchten, können Sie unter https://greenbytes.de/tech/webdav/rfc7240.html#return nach Inspiration suchen.

3
Julian Reschke

Ich glaube nicht, dass die REST-Spezifikation (übrigens, ich denke, Sie müssen sich hierzu RFC 6902 anschauen), zwingende strenge Regeln umgibt (was Sie zurückgeben sollten). Ich möchte lieber die gesamte Ressource zurückgeben, damit der Client sie nach Bedarf verwenden kann. Theoretisch weiß der Client selbst, was gepatcht wurde (zumindest was die Anforderung war). Die Bestätigung vom Server zu erhalten, ist möglicherweise nicht trivial (vor allem, da PATCH hauptsächlich für Sammlungen verwendet wird), oder es lohnt sich nicht.