+5  A: 

Don't do the second approach. Funneling different actions through one endpoint does not feel RESTful IMO.

You have DELETE /cart_items/cart_item_id/ that removes cart_item_id from their cart. What about DELETE /cart_items/ to clear the cart itself?

Crescent Fresh
+1  A: 

DELETE /cart_items/ is an interesting idea that has also been discussed here.

Rich Apodaca
+1  A: 

Adding an item to a cart: POST carts/{cartid}/items

Retrieving a specific item from the cart: GET carts/{cartid}/items/{itemid}

Deleting a specific item from the cart: DELETE carts/{cartid}/items/{itemid}

Getting the state of the cart GET carts/{cartid}/state
(Could return a value like 0,1 that indicates the number of items in the cart)

Emptying the cart PUT carts/{cartid}/state?state=0

Does this look intuitive?

Prashanth
Emptying the cart with `DELETE carts/{cartid}/items` looks much more intuitive in your (otherwise very clear) example.
Tomas