2016-06-09 29 views
6

Il metodo PATCH restituisce tutti i campi della risorsa nel corpo della risposta?
Oppure dovrebbe restituire solo i campi aggiornati?
Il metodo PATCH dovrebbe restituire tutti i campi della risorsa nel corpo della risposta?

sto leggendo this

Per esempio, se si restituisce solo i campi aggiornato, l'utente potrebbe sapere quali campi sono stati aggiornati nel server, mentre l'utente ha aggiornato alcuni campi.

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

risposta

3

Normalmente questo deve essere gestito tramite content negotiation. In altre parole, il client richiede per una rappresentazione specifica se ne ha bisogno. La richiesta sarebbe simile a questa:

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

In questo caso, il cliente esprime che vuole una rappresentazione completa user come risposta. O potrebbe fare:

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

chiedere una rappresentazione di frammento generico di qualche oggetto.

Non è necessario implementare entrambi se non si desidera, nel qual caso basta fare il proprio caso d'uso e rispondere con 406 Not Acceptable a media-types non supportato per il momento.

0

Non credo che il RES La specifica T (btw penso che tu debba guardare allo RFC 6902 per questo) impone regole forti su questo (cosa dovresti restituire). Preferirei restituire l'intera risorsa in modo che il client possa utilizzarla in qualsiasi modo. In teoria, il client stesso sa cosa è stato riparato (almeno quale era la richiesta). Ottenere conferma dal server potrebbe non essere banale (soprattutto dato che PATCH è usato principalmente per le collezioni), o almeno non ne vale la pena.

+0

C'è una definizione in RFC 5789, sezione 2.1: https://tools.ietf.org/html/rfc5789#section-2.1 –

+0

Sebbene curiosamente si parli di un documento, ma nient'altro. '' risposta PATCH successo a file di testo esistente: HTTP/1.1 204 No Content Content-Location: /file.txt ETag: "e0023aa4f" '' –

+0

Tuttavia, dice anche: '' Si noti che altro successo anche i codici potrebbero essere usati. '(oltre 204) –