PATCH
le richieste descrivono un insieme di operazioni da applicare a una risorsa, se si applica lo stesso insieme di operazioni due volte alla stessa risorsa, il risultato potrebbe non essere lo stesso. Questo perché la definizione delle operazioni dipende da te. In altre parole, devi definire le regole di fusione .
Ricorda che una PATCH
richiesta potrebbe essere utilizzata per applicare patch alle risorse in molti formati diversi, non solo JSON.
Quindi una PATCH
richiesta può essere idempotente se si definiscono le regole di fusione come idempotenti .
Esempio idempotente:
// Original resource
{
name: 'Tito',
age: 32
}
// PATCH request
{
age: 33
}
// New resource
{
name: 'Tito',
age: 33
}
Esempio non idempotente:
// Original resource
{
name: 'Tito',
age: 32
}
// PATCH request
{
$increment: 'age'
}
// New resource
{
name: 'Tito',
age: 33
}
Nel secondo esempio ho usato una sintassi "Mongo like" che ho inventato per incrementare un attributo. Chiaramente questo non è idempotente, poiché l'invio della stessa richiesta più volte comporterebbe risultati diversi ogni volta.
Ora ti starai chiedendo se l'uso di tale sintassi inventata è valido. Secondo gli standard , è:
La differenza tra le richieste PUT e PATCH si riflette nel modo in cui il server elabora l'entità inclusa per modificare la risorsa identificata dall'URI di richiesta. In una richiesta PUT, l'entità inclusa viene considerata una versione modificata della risorsa memorizzata sul server di origine e il client richiede la sostituzione della versione archiviata. Con PATCH, tuttavia, l'entità racchiusa contiene una serie di istruzioni che descrivono come modificare una risorsa attualmente residente sul server di origine per produrre una nuova versione.
E potresti anche chiederti se è riposante utilizzare le PATCH
richieste in questo modo, e molte persone ritengono che non lo siano, ecco una buona risposta con molti commenti sul problema.
{"name": "bendjamin franklin"}