Как управлять состоянием в REST

Я думаю, этот вопрос будет звучать знакомым, но я еще один программист, озадаченный REST.

У меня есть традиционное веб-приложение, которое идет от StateA к StateB и так далее Если пользователь отправляется (url of) StateB, я хочу убедиться, что он посетил StateA раньше. Традиционно я делал это с использованием состояния сеанса.

Так как состояние сеанса в REST недопустимо, как мне это достичь?

Ответ 1

На это есть 2 ответа REST, в зависимости от того, что конкретно вы пытаетесь сделать.

Если вы действительно пытаетесь управлять состоянием, основанным на запросах (например, когда пользователь работает через многоэкранный мастер или какой-либо другой рабочий процесс на основе навигации), тогда ответ REST заключается в том, что состояние должно быть отправлено обратно и - с каждым запросом/ответом (используя что-то вроде скрытого текстового поля, строки запроса или данных POST, хранящихся в форме). Это реализация шаблона проектирования "Состояние клиента" Мартина Фаулера (подробно изложена в его книге "Шаблоны архитектуры корпоративных приложений", см. здесь для справки).

Если вы, с другой стороны, пытаетесь управлять каким-то новым объектом на сервере - например, с корзиной покупок, то ответ REST заключается в том, что вы фактически создаете новый объект, к которому можно получить доступ, например любой другой по прямому URL. Независимо от того, сохраняете ли вы этот новый объект в базе данных или в памяти приложения (например, традиционный объект Session), зависит от вас, но в любом случае новый объект имеет меньше о "состоянии" на сервере и больше о создании нового объект для взаимодействия с пользователем.