In generale hai un endpoint che rappresenta l'intera raccolta di x :
/products
Dire, si desidera aggiornare un singolo prodotto, si effettua un PUT a /products/{id}
. Se vuoi aggiornare parzialmente un singolo prodotto (non aggiornando tutti i campi), puoi anche usare un PATCH per /products/{id}
. Lo stesso vale per l'eliminazione di una singola entità ( ELIMINA a /products/{id}
).
Se vuoi scegliere come target una sola risorsa, ti qualifichi tramite percorso, quale risorsa singola , vuoi modificare.
L'unica azione che rompe lo schema è la creazione di una risorsa. Quando si crea una risorsa, si prende di mira la collezione nel suo insieme, dire POST a /products
.
Detto questo, dovrebbe essere chiaro che l'obiettivo per le operazioni che incidono sulla raccolta nel suo insieme, dovrebbe andare all'endpoint di raccolta appropriato.
Ad esempio, vuoi recuperare un sottoinsieme di prodotti che sono rossi, lo chiedi per
ARRIVARE a /products?colour=red
.
Quindi, se si desidera eliminare tutti questi, ELIMINA /products?colour=red
. Oppure, se si desidera eliminare alcuni dei prodotti tramite id
, è possibile eliminare /products?id=1&id=2&id=3
.
Che dire della creazione di massa di risorse? POST la tua collezione [{...},{...},{...}]
semplicemente per /products
. Lo stesso vale per PUT e PATCH .
È molto semplice.
Per rispondere alle tue domande:
Se devo aggiungere alla raccolta, è OK che passo solo alcuni prodotti con PUT?
Non è solo OK, sei incoraggiato a farlo in questo modo.
Se devo eliminare alcuni prodotti dalla raccolta, è OK passare i dati del filtro (un array di ID) con DELETE?
Va bene. Come ha scritto Eneko Alonso, a volte ci sono operazioni in blocco incapsulate tramite endpoint "controller", ovvero un POST viene utilizzato per innescare operazioni (complesse).