Ruby on Rails作为RESTful架构

时间:2017-09-04 12:22:25

标签: ruby-on-rails rest stateless

每当我读到REST架构时,总会有一个关于无状态操作的消息。从我的基本理解来看,Ruby on Rails应该是REST架构。 根据我的理解,无状态操作意味着连续的请求彼此独立。 但是在Ruby on Rails中,我们确实有会话变量和cookie,它们可以跟踪从一个请求到另一个请求的一些数据。 这无视无国籍行动吗? 我很迷惑。 有人可以澄清一下吗?

2 个答案:

答案 0 :(得分:3)

  

但是在Ruby on Rails中,我们确实有会话变量和cookie,可以跟踪从一个请求到另一个请求的一些数据。这无视无国籍行动吗?

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

答案 1 :(得分:0)

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

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

饼干怎么样?

Cookie确实随每个请求一起发送 - 并且很长一段时间浏览器可以保留状态的唯一方式,除了通过URL来回传递它:s。

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

会议的整个想法本质上是有状态的。您正在添加请求URL,参数和标题之外的状态存储,这就是基于会话的授权被视为有状态的原因。