2009-01-14 13 views
5

Załóżmy, że mam sklep internetowy z funkcją "koszyka na zakupy" i chcę zaimplementować link "pusty koszyk" w trybie RESTOWN.RESTful wiele aktualizacji (na przykład: wyczyść koszyk)?

Dla uproszczenia załóżmy, że moje zasoby to Koszyk zawierający CartItems, z których każdy ma Produkt. Moje identyfikatory URI mogą być następujące:

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

Jeśli tak, to jak będzie wyglądał URESTULT URI dla linku "pustego koszyka"?

Zamiast tego mogę myśleć o Koszyka jako posiadacz ogólnego przeznaczenia dla czynności (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/ 

Takie podejście wydaje się bardziej skomplikowana niż to musi być. Jaki byłby lepszy sposób?

Odpowiedz

15

Nie rób drugiego podejścia. Funneling inny actions przez jeden punkt końcowy nie czuć relaksujący IMO.

Masz DELETE /cart_items/cart_item_id/, który usuwa cart_item_id z koszyka. A co z DELETE /cart_items/, aby usunąć sam koszyk?

6

Dodawanie pozycji do koszyka:

POST carts/{cartid}/items

Odzyskiwanie konkretną pozycję z koszyka:

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

Usuwanie konkretną pozycję z koszyka:

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

Pierwsze stan koszyka:

GET carts/{cartid}/state

(może powrócić do wartości jak 0,1, który wskazuje liczbę przedmiotów w koszyku)

Opróżnianie koszyk:

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

Czy to wygląda intuicyjnie?

+8

Opróżnianie koszyka za pomocą 'DELETE carts/{cartid}/items' wygląda o wiele bardziej intuicyjnie w twoim (w przeciwnym razie bardzo klarownym) przykładzie. – Tomas

+0

Jakiekolwiek obawy związane z bezpieczeństwem dotyczące umieszczania identyfikatora koszyka w adresie URL? –

+0

@Breako nie, jeśli koszyk jest losowo generowanym przewodnikiem. Nawet wtedy należy przeprowadzić kontrole bezpieczeństwa w celu sprawdzenia "właściciela" koszyka. –