Ответ заключается в том, что ваше приложение (в сценарии REST) просто не отслеживает происходящее. Все состояния управляются клиентом, а переходы между состояниями осуществляются посредством навигации по URI. Часть «Передача состояний» REST относится к переходу клиента к новым URI, которые являются новыми состояниями.
URI, доступ к которому осуществляется с помощью GET, фактически является операцией только для чтения согласно спецификации HTTP и методологии REST. Это означает, что если клиент «резервирует» какой-либо предыдущий URI, «худшее», что происходит, - это когда выполняется еще один GET и загружается больше данных.
Допустим, клиент делает это (используя очень упрощенный псевдо-HTTP) ...
GET //site.com/product/123
При этом извлекается информация (или, возможно, страница) об идентификаторе продукта 123, которая предположительно включает ссылку на URI, который можно использовать для размещения этого товара в корзине покупок пользователя. Таким образом, пользователь решает купить товар. Опять же, это упрощенно, но:
POST //site.com/shoppingcart/
{productid = 123}
Возвращение из этого может быть представлением корзины покупок или ссылкой на добавленный товар (который можно использовать в URI корзины покупок с DELETE для повторного удаления товара), или множеством других вещей (таких как более глубокий XML, описывающий содержимое корзины с другими URI, указывающими на элементы корзины и обратно на исходные продукты). Это все зависит от вас.
Но «состояние» определяется тем, что делает клиент. Он вообще не отслеживается на сервере, хотя вы непременно сохраните копию содержимого его корзины покупок в своей базе данных в течение некоторого периода времени. (Однажды я вернулся на веб-сайт два года спустя, и моя корзина покупок все еще была там ...) Но он должен следить за удостоверением личности. Для вашего серверного приложения это просто еще одна запись, предположительно с истечением срока действия.
Таким образом, вам не нужны файлы cookie, и JavaScript полностью зависит от реализации клиента. Трудно создать достойный REST-клиент без сценария - вы, вероятно, могли бы создать что-то с помощью XSLT и возвращать только XML с сервера, но это, вероятно, более трудная задача, чем кому-либо нужно.
Отправной точкой является по-настоящему понять REST, затем спроектировать систему и построить ее. Это определенно не позволяет строить его на лету, как это делают большинство других систем (правильно или неправильно).
Это отличная статья, которая дает вам довольно «чистый» взгляд на REST, не слишком абстрактно и не увязая в коде:
http://www.infoq.com/articles/subbu-allamaraju-rest