2016-06-09 4 views
6

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

Ich this

Zum Beispiel lesen, wenn es nur Felder aktualisiert zurückgibt, könnte der Benutzer wissen, welche Felder in dem Server aktualisiert wurden, während der Benutzer einige Felder aktualisiert.

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

Antwort

3

Normalerweise sollte dies durch content negotiation gehandhabt werden. Mit anderen Worten fragt der Client für eine bestimmte Darstellung, wenn es eine benötigt. Der Antrag würde wie folgt aussehen:

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

In diesem Fall drückt der Kunde, dass er eine volle user Darstellung als Antwort will. Oder es könnte:

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

um eine generische Fragmentdarstellung eines Objekts zu fragen.

Sie müssen nicht beide implementieren, wenn Sie nicht möchten, in diesem Fall tun Sie einfach Ihren Anwendungsfall und reagieren mit 406 Not Acceptable auf media-types, die Sie im Moment nicht unterstützen.

0

Ich glaube nicht das RES T-Spezifikation (übrigens denke ich, dass Sie dafür RFC 6902 betrachten müssen) erzwingt irgendwelche starken Regeln um diese (was Sie zurückgeben sollten). Ich würde lieber die gesamte Ressource zurückgeben, damit der Client sie beliebig verwenden kann. Theoretisch weiß der Client selbst, was gepatcht wurde (zumindest was die Anfrage war). Eine Bestätigung vom Server zu erhalten, ist vielleicht nicht trivial (besonders, da PATCH hauptsächlich für Sammlungen verwendet wird) oder zumindest nicht lohnend.

+0

Es gibt eine Definition in RFC 5789, Abschnitt 2.1: https://tools.ietf.org/html/rfc5789#section-2.1 –

+0

Obwohl es seltsamerweise von einem Dokument, aber nichts anderes spricht. '' Erfolgreiche PATCH Antwort auf vorhandene Textdatei: HTTP/1.1 204 No Content Content-Location: /file.txt ETag: "e0023aa4f" '' –

+0

Aber es sagt auch: '' Hinweis , dass anderer Erfolg Codes könnten auch verwendet werden.'' (neben 204) –

Verwandte Themen