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-адреса, параметров и заголовков запроса, поэтому авторизация на основе сеанса считается сохраняющей состояние.

Другие вопросы по тегам