Ruby on rails RubyonRails作为RESTful体系结构

Ruby on rails RubyonRails作为RESTful体系结构,ruby-on-rails,rest,stateless,Ruby On Rails,Rest,Stateless,每当我读到REST体系结构时,总会有一句关于无状态操作的话。从我的基本理解来看,RubyonRails应该是REST体系结构的一部分。 根据我的理解,无状态操作意味着连续的请求彼此独立。 但是在RubyonRails中,我们有会话变量和cookie,它们可以跟踪从一个请求到另一个请求的数据。 这难道不违背无状态操作吗? 我很困惑。 有人能澄清一下吗 RubyonRails遵循一种务实的现实世界方法——而不是坚持原教旨主义原则。REST的核心可能是无状态的,但为浏览器创建完全无状态的应用程序并不是

每当我读到REST体系结构时,总会有一句关于无状态操作的话。从我的基本理解来看,RubyonRails应该是REST体系结构的一部分。 根据我的理解,无状态操作意味着连续的请求彼此独立。 但是在RubyonRails中,我们有会话变量和cookie,它们可以跟踪从一个请求到另一个请求的数据。 这难道不违背无状态操作吗? 我很困惑。
有人能澄清一下吗

RubyonRails遵循一种务实的现实世界方法——而不是坚持原教旨主义原则。REST的核心可能是无状态的,但为浏览器创建完全无状态的应用程序并不是很理想

Rails在其路由约定中主要采用了使用HTTP动词表示不同于REST的操作的资源标识符的思想。如何使用it构建应用程序取决于程序员

# 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头中传递

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

饼干呢? Cookie确实随每个请求一起发送——在很长一段时间内,浏览器只能通过URL:s来回传递状态

然而,Rails使用cookie进行会话存储的方式比赋予它无状态的特性更为简单。解码加密cookie的速度比任何其他存储机制都要快


会话的整个概念本质上是有状态的。除了请求url、参数和头之外,您还添加了一个状态存储,这就是为什么基于会话的授权被认为是有状态的。

RubyonRails遵循一种实用的现实方法,而不是一种基本原则。REST的核心可能是无状态的,但为浏览器创建完全无状态的应用程序并不是很理想

Rails在其路由约定中主要采用了使用HTTP动词表示不同于REST的操作的资源标识符的思想。如何使用it构建应用程序取决于程序员

# 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头中传递

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

饼干呢? Cookie确实随每个请求一起发送——在很长一段时间内,浏览器只能通过URL:s来回传递状态

然而,Rails使用cookie进行会话存储的方式比赋予它无状态的特性更为简单。解码加密cookie的速度比任何其他存储机制都要快

会话的整个概念本质上是有状态的。除了请求url、参数和头之外,还添加了一个状态存储,这就是基于会话的授权被认为是有状态的原因

但是在RubyonRails中,我们有会话变量和cookie,它们可以跟踪从一个请求到另一个请求的数据。这难道不违背无状态操作吗

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

但是在RubyonRails中,我们有会话变量和cookie,它们可以跟踪从一个请求到另一个请求的数据。这难道不违背无状态操作吗


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

但是cookies呢?cookies是随每个请求一起发送的,但是使用cookies存储会话与其说是无状态状态,不如说是性能上的让步@Sergiotulentsev但是Cookie呢?Cookie是随每个请求一起发送的,但是使用Cookie来存储会话更多的是对性能的让步,而不是使其无状态@Sergiotulentsev是的,但这只适用于存储会话的最快方式是cookie存储。否则,每次请求只发送会话标识符,而会话本身在服务器上会更改。@max Yep,因此需要澄清。是的,但这只适用于存储会话的最快方式是cookie存储。否则,每个请求只发送会话标识符,而会话本身在服务器上会发生更改。@max Yep,因此需要澄清。