Struttura dell'URL corretta nell'API REST per cambiare lo stato di un particolare record

3

Qual è la corretta struttura dell'URL nell'API REST per cambiare lo stato di un particolare record (ad esempio, cambiare da "nuovo" a "elaborato").

Ora lavoro con questo URL senza corpo della richiesta:

PATCH /employees/123/items/456/process/ HTTP/1.1

Ma forse meglio sarà:

PUT /employees/123/items/456/ HTTP/1.1

e nel corpo della richiesta specificare lo stato:

{"state":"processed"}

    
posta Artegon 24.07.2018 - 18:22
fonte

2 risposte

7

Sembra che una combinazione di entrambe le soluzioni sia appropriata:

PATCH /employees/123/items/456 HTTP/1.1

Con un corpo di richiesta di:

{"state":"processed"}

Da RFC 5789 :

The difference between the PUT and PATCH requests is reflected in the way the server processes the enclosed entity to modify the resource identified by the Request-URI. In a PUT request, the enclosed entity is considered to be a modified version of the resource stored on the origin server, and the client is requesting that the stored version be replaced. With PATCH, however, the enclosed entity contains a set of instructions describing how a resource currently residing on the origin server should be modified to produce a new version. The PATCH method affects the resource identified by the Request-URI, and it also MAY have side effects on other resources; i.e., new resources may be created, or existing ones modified, by the application of a PATCH.

(enfasi, mia)

    
risposta data 24.07.2018 - 20:08
fonte
0

Raccomando di utilizzare JSON PATCH per questo - link

PATCH /employees/123 HTTP/1.1
Host: example.org
Content-Type: application/json-patch+json
If-Match: "abc123"

[
 { "op": "replace", "path": "/items/456/state", "value": "processed" },
]

Ci sono un paio di funzioni chiave di questa soluzione:

  • È possibile sostituire (o aggiungere o eliminare) qualsiasi parte dell'oggetto di destinazione, semplicemente indirizzando quella parte usando JSONPath (come XPath) e specificando il nuovo valore. CANCELLA SOSTITUISCI o AGGIUNGI supportato (così come altri come mossa).

  • Catturi l'ETAG nel GET e lo passi lungo nella chiamata PATCH (If-Match) - in modo che tu non applichi una modifica alla VERSIONE sbagliata di un oggetto (se due persone apportano modifiche nello stesso tempo, la prima vince, invece delle prime vittorie e la seconda vince i dati)

risposta data 25.07.2018 - 15:52
fonte

Leggi altre domande sui tag