2013-08-05 2 views
4

Один из основных принципов останова - не поддерживать состояние на сервере или не сообщать без него. Я хочу посмотреть, как этот принцип работает в корзине покупок? Итак, скажите, добавляет ли пользователь товары в корзину с торгового сайта. На мой взгляд, у сервера будет некоторая реализация, чтобы иметь корзину покупок в области сеанса, и пользователь отправит сообщение для добавления продукта в корзину покупок. Для примера/shoppingcart/products/1. Теперь продукты остаются добавленными в корзину покупок (но не сохраняются в базе данных), пока пользователь не подтвердит оформление заказа. Во время подтверждения выезда элементы корзины сохраняются в базе данных на стороне сервера.Относительно принципа «Общайтесь без гражданства»

Этот подход (сдача предмета в корзину покупок на стороне сервера, который находится в области сеанса) нарушает принцип покоя? Если да, то как мы можем реализовать добавление продукта в корзину покупок, соблюдая принцип «без гражданства»?

+0

Пользователи редко, если вообще когда-либо, взаимодействуют напрямую с услугой REST. Обычно есть некоторый промежуточный код (будь то JS в браузере, толстый клиент, веб-сайт без REST или даже код без REST, размещенный на одном и том же веб-сайте). Нечего сказать, что * этот * код должен быть без гражданства. –

+0

Извините, что мне нужно знать для реализации на стороне сервера. Да, я согласен, что пользователь не будет напрямую взаимодействовать с сервисом отдыха, но будет взаимодействовать с некоторыми js или с другим механизмом, который внутренне будет использовать остальные uri для выполнения действия. –

+0

Вопреки тому, что говорит Дамиен, пользователи * делают * напрямую взаимодействуют с службами RESTful, они просто неотличимы на стороне клиента от не-RESTful, и часто пользователь не знает! Любая система корзины покупок, в которой каждая корзина имеет свой собственный URL, может быть спроектирована с учетом REST, даже если этот URL доступен только пользователю, который ее создал. Часть из них на самом деле будет RESTful. –

ответ

2

Корзина должна быть обработана как ресурс, а продукты добавлены/удалены так же, как вы можете добавлять или удалять ассоциации между любыми двумя ресурсами в REST. Вместо того, чтобы клиент сказал: «Теперь покупайте товары в моей корзине« клиент должен сказать », теперь покупайте товары в корзине # 187462». Присвойте каждой корзине URL-адрес, и ваши действия действуют на этот ресурс, а не на некоторый массив продуктов, привязанный к текущему сеансу.

Альтернативой, которая также является без гражданства, является то, что клиент отслеживает все предметы в корзине, но это означает, что пользователь не может оставить корзину (отказаться от нее) на одном компьютере и возобновить покупки на другом устройстве.

Приложение: Помните, что разрешения/контроль доступа могут быть назначены независимо. Конечно, каждая корзина имеет URL-адрес, но обязательно сделайте так, чтобы зарегистрированный пользователь мог видеть только созданные ими ресурсы корзины.

+0

Отлично, да, это выглядит разумным подходом к обработке тележки в качестве ресурса, и это позволит назначить уникальный идентификатор для корзины на сервере, где элементы могут быть добавлены/обновлены/удалены. –

Смежные вопросы