Aggiornamenti multipli RESTful (esempio: cancella un carrello)?
-
22-07-2019 - |
Domanda
Supponiamo di avere un negozio online con un " carrello " e voglio implementare un "carrello vuoto" link in modo RESTful.
Per semplicità, supponiamo che le mie risorse siano un carrello che contiene CartItems, ognuno dei quali ha un prodotto. I miei URI potrebbero essere:
# add a product to the current user's Cart POST /products/product_id/cart_items/ # remove a product from the current user's Cart DELETE /cart_items/cart_item_id/
In tal caso, quale sarebbe l'URI RESTful per il "carrello vuoto"? link simile?
Invece, potrei pensare al carrello come a un detentore generale di azioni ( come descritto qui ):
# add a product # form data contains e.g., product_id=123&action=add POST /carts/cart_id/actions/ # remove a product # action_id is the id of the action adding product 123 DELETE actions/action_id # empty cart # form data contains action=clear POST /carts/cart_id/actions/
Questo approccio sembra più complicato di quanto debba essere. Quale sarebbe un modo migliore?
Soluzione
Non seguire il secondo approccio. La canalizzazione di diverse azioni
attraverso un endpoint non sembra RESTful IMO.
Hai DELETE / cart_items / cart_item_id /
che rimuove cart_item_id
dal loro carrello. Che dire di DELETE / cart_items /
per cancellare il carrello stesso?
Altri suggerimenti
Aggiunta di un articolo a un carrello:
Carrelli POST / {cartid} / items
Recupero di un articolo specifico dal carrello:
OTTIENI carrelli / {cartid} / items / {itemid}
Eliminazione di un articolo specifico dal carrello:
ELIMINA carrelli / {cartid} / items / {itemid}
Ottenere lo stato del carrello:
OTTIENI carrelli / {cartid} / state
(Potrebbe restituire un valore come 0,1 che indica il numero di articoli nel carrello)
Svuotare il carrello:
PUT carts / {cartid} / state? state = 0
Sembra intuitivo?
DELETE / cart_items /
è un'idea interessante che è stata discussa anche qui .