2009-01-14 19 views
5

Digamos que tengo una tienda en línea con una función de "carrito de la compra" y quiero implementar un enlace de "carrito vacío" de forma RESTANTE.RESTful Actualizaciones múltiples (Ejemplo: ¿Borrar un carrito de compras)?

Para simplificar, digamos que mis recursos son un carro que contiene CartItems, cada uno de los cuales tiene un producto. Mis URIs pueden ser:

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

Si es así, ¿cuál sería el URI de descanso para el aspecto enlace "carro vacío" como?

En cambio, podría pensar en el carro como un soporte de propósito general para acciones (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/ 

Este enfoque parece más complicado de lo que tiene que ser. ¿Cuál sería una mejor manera?

Respuesta

15

No haga la segunda aproximación. El embudo diferente actions a través de un punto final no se siente RESTful IMO.

Tienes DELETE /cart_items/cart_item_id/ que elimina cart_item_id de su carrito de compras. ¿Qué pasa con DELETE /cart_items/ para borrar el carrito?

6

Agregar un elemento a un carro:

POST carts/{cartid}/items

Recuperación de un elemento específico de la carreta:

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

Eliminación de un elemento específico de la carreta:

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

Obtener el estado de la cesta:

GET carts/{cartid}/state

(podría volver como un valor 0,1 que indica el número de elementos en el carro)

Vaciado de la cesta:

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

¿Esto parece intuitivo?

+8

Vaciar el carrito con 'DELETE carts/{cartid}/items' parece mucho más intuitivo en su ejemplo (de lo contrario, muy claro). – Tomas

+0

¿Tiene alguna duda sobre la seguridad de colocar un carrito de compras en una URL? –

+0

@Breako no si el cartid es un guid generado aleatoriamente. Incluso entonces, se deben hacer comprobaciones de seguridad para validar al "propietario" del carrito. –

Cuestiones relacionadas