2009-01-14 8 views
5

Angenommen, ich habe einen Online-Shop mit einer "Warenkorb" -Funktion und möchte einen "leeren Warenkorb" -Link auf REST-basierende Weise implementieren.RESTful Multiple Updates (Beispiel: Löschen eines Einkaufswagens)?

Zur Vereinfachung sagen wir, meine Ressourcen sind ein Warenkorb, der Einkaufswagen enthält, von denen jeder ein Produkt hat. Mein URIs könnte sein:

 
# 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/ 

Wenn ja, was wäre der RESTful-URI für die „leeren Warenkorb“ -Link aus?

Stattdessen könnte ich denke an den Wagen als Allzweckhalter für Aktionen (as described here):

 
# 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/ 

Dieser Ansatz komplizierter scheint als es sein muss. Was wäre ein besserer Weg?

Antwort

15

Tun Sie nicht den zweiten Ansatz. Das Trunneln verschiedener actions über einen Endpunkt fühlt sich nicht als RESTful IMO an.

Sie haben DELETE /cart_items/cart_item_id/, die cart_item_id aus ihrem Warenkorb entfernt. Was ist mit DELETE /cart_items/ den Warenkorb selbst löschen?

6

Hinzufügen eines Elements in einen Warenkorb:

POST carts/{cartid}/items

Abrufen eines bestimmten Artikel aus dem Warenkorb:

GET carts/{cartid}/items/{itemid}

Löschen eines bestimmten Artikel aus dem Warenkorb:

DELETE carts/{cartid}/items/{itemid}

den Zustand des Wagens Anfahrt:

GET carts/{cartid}/state

(Könnte einen Wert wie 0,1 zurück, die die Anzahl der Elemente im Warenkorb anzeigt)

ausleeren Warenkorb:

PUT carts/{cartid}/state?state=0

Sieht das intuitiv aus?

+8

Das Entleeren des Wagens mit 'DELETE carts/{cartid}/items' sieht in Ihrem (ansonsten sehr übersichtlichen) Beispiel viel intuitiver aus. – Tomas

+0

Sicherheitsbedenken, wenn Sie eine cartId in eine URL einfügen möchten? –

+0

@Breako nicht, wenn die Kartei eine zufällig generierte GUID ist. Selbst dann sollten Sicherheitsüberprüfungen durchgeführt werden, um den "Besitzer" des Wagens zu validieren. –

Verwandte Themen