Ruby on Rails как архитектура RESTful
Всякий раз, когда я читаю об архитектуре REST, всегда есть слово об операциях без сохранения состояния. Из моего базового понимания предполагается, что Ruby on Rails относится к архитектуре REST. Насколько я понимаю, операции без сохранения состояния означают, что последовательные запросы не зависят друг от друга. Но в Ruby on Rails у нас есть переменные сеанса и файлы cookie, которые как бы отслеживают некоторые данные от одного запроса к другому. Разве это не бросает вызов операциям без сохранения состояния? Я сбит с толку. Может кто-нибудь уточнить, пожалуйста?
2 ответа
Но в Ruby on Rails у нас есть переменные сеанса и файлы cookie, которые как бы отслеживают некоторые данные от одного запроса к другому. Разве это не бросает вызов операциям без сохранения состояния?
Нет, запросы остаются без сохранения состояния (при хранении сеансов на основе файлов cookie), поскольку файлы cookie отправляются с каждым запросом (а не отслеживаются на сервере). Поэтому каждый запрос содержит всю информацию, необходимую для его обработки, что делает его независимым от всех предыдущих запросов.
Ruby on Rails следует прагматическому подходу реального мира, а не принципиальной приверженности принципам. REST может быть без сохранения состояния по своей сути, но создание приложений без сохранения состояния для браузера не очень желательно.
Rails в основном охватывает идеи идентификаторов ресурсов, использующих глаголы HTTP для обозначения действий, отличных от REST, в своих соглашениях о маршрутизации. Как вы используете его для создания приложений, зависит от программиста.
# An example of Rails "RESTful" routes:
Prefix Verb URI Pattern Controller#Action
things GET /things(.:format) things#index
POST /things(.:format) things#create
new_thing GET /things/new(.:format) things#new
edit_thing GET /things/:id/edit(.:format) things#edit
thing GET /things/:id(.:format) things#show
PATCH /things/:id(.:format) things#update
PUT /things/:id(.:format) things#update
DELETE /things/:id(.:format) things#destroy
Приложения API, использующие аутентификацию на основе токенов, можно считать не имеющими состояния, например, поскольку учетные данные клиентов передаются в заголовке HTTP с каждым запросом.
Для классических веб-приложений это неосуществимо, поскольку браузер не предоставляет каких-либо полезных опций для отправки учетных данных с запросом. Вы можете создать приложение без сохранения состояния, но без какой-либо аутентификации, не требуя от пользователя входа в систему при каждом запросе.
Как насчет куки?
Куки действительно отправляются с каждым запросом, и в течение долгого времени единственный способ, которым браузер мог удерживать состояние, кроме передачи его туда и обратно через URL:s.
Однако способ, которым Rails использует cookie для хранения сеансов, является более конфиденциальным, чем придание ему состояния без сохранения состояния. Декодирование зашифрованного куки просто быстрее, чем любой другой механизм хранения.
Вся идея сессий по своему характеру. Вы добавляете хранилище состояний помимо URL-адреса, параметров и заголовков запроса, поэтому авторизация на основе сеанса считается сохраняющей состояние.