Ruby 在 Rails 作为 RESTful 架构

Ruby on Rails as a RESTful architecture

每当我读到REST架构的时候,总有一个词是无状态的operations.From我对Rails的基本理解Ruby应该是REST架构。 根据我的理解,无状态操作意味着连续的请求彼此独立。 但是在 Rails 上的 Ruby 中,我们确实有会话变量和 cookie,它们可以跟踪从一个请求到另一个请求的一些数据。 这不是违背无状态操作吗? 我很迷惑。 有人可以澄清一下吗?

Ruby 在 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 header 中传递。

对于经典的 Web 应用程序,这是不可行的,因为浏览器不提供任何有用的选项来发送请求的凭据。您可以构建一个完全无状态的应用程序 - 但不需要用户在每个请求上登录的任何类型的身份验证。

cookie 呢?

Cookie 确实随每个请求一起发送 - 长期以来,除了通过 URL:s.

来回传递它之外,浏览器保持状态的唯一方法

然而,Rails 使用 cookie 进行 session 存储的方式比赋予其无状态性质更为偶然。解码加密的 cookie 比任何其他存储机制都快。

sessions 的整个想法本质上是有状态的。除了请求 url、params 和 headers,您正在添加一个状态存储,这就是为什么基于 session 的授权被认为是有状态的。

But in Ruby on Rails we do have session variables and cookies that sort of keeps track of some data from one request to another. Doesn't this defy stateless operations?

不,请求保持 "stateless"(使用基于 cookie 的会话存储),因为 cookie 随每个请求一起发送(而不是在服务器上进行跟踪)。因此,每个请求都包含其处理所需的所有信息,使其独立于所有先前的请求。