Множественные обновления RESTful (пример: очистка корзины покупок)?

Допустим, у меня есть интернет-магазин с функцией «корзина покупок», и я хочу реализовать ссылку «пустая корзина» в стиле RESTful.

Для простоты предположим, что мои ресурсы - это корзина, содержащая CartItems, у каждого из которых есть Product. Мои URI могут быть:

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

Если да, то как будет выглядеть RESTful URI для ссылки «пустая корзина»?

Вместо этого я мог думать о тележке как о универсальном держателе для действий (как описано здесь):

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

Этот подход кажется более сложным, чем должен быть. Что было бы лучше?


person Rich Apodaca    schedule 14.01.2009    source источник


Ответы (3)


Не делайте второй подход. Передача разных actions через одну конечную точку не воспринимается как RESTful IMO.

У вас есть DELETE /cart_items/cart_item_id/, который удаляет cart_item_id из корзины. Как насчет DELETE /cart_items/, чтобы очистить тележку?

person Crescent Fresh    schedule 14.01.2009

Добавление товара в корзину:

POST carts/{cartid}/items

Получение определенного товара из корзины:

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

Удаление определенного товара из корзины:

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

Получение состояния тележки:

GET carts/{cartid}/state

(Может возвращать значение вроде 0,1, которое указывает количество товаров в корзине)

Опорожнение корзины:

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

Это кажется интуитивно понятным?

person Prashanth    schedule 17.02.2009
comment
Очистка корзины с помощью DELETE carts/{cartid}/items выглядит гораздо более интуитивно понятным в вашем (в остальном очень понятном) примере. - person Tomas; 08.10.2010
comment
Есть ли проблемы с безопасностью при добавлении cartId в URL-адрес? - person Breako Breako; 10.02.2014
comment
@Breako нет, если cartid - это случайно сгенерированный гид. Даже в этом случае необходимо провести проверку безопасности, чтобы подтвердить владельца тележки. - person Todd Smith; 18.02.2015

DELETE /cart_items/ - интересная идея, которая также обсуждалась здесь.

person Rich Apodaca    schedule 14.01.2009