REST架构究竟是什么,它在Rails中如何实现?

这就是我对REST体系结构的看法。

对于每个资源,都有一个唯一的URI。

我们可以使用它的URI和HTTP操作[POST,GET,PUT和DELETE]来操作该对象。 HTTP请求传输该对象状态的表示。

在我读过的所有文章中,REST都是以一种奇怪而令人困惑的方式解释的。

还有一件事,rails中的RESTFUL实现为不同的目的生成不同的URL。 像/团队 - >为'索引'方法... /团队/新 - >'新'方法等。 这不是远离休息,它定义每个资源有一个唯一的URI?


我认为你对REST的理解非常好。 它不需要比它应该更复杂。 @Surya还概述了一些非常好的观点。

Rails将HTTP方法映射到控制器方法的方式是:

GET    => show
PUT    => update
POST   => create
DELETE => destroy

Rail提供的另外两种资源/方法:

resource/new  => new
resource/edit => edit

很可能不是用于所有实际目的的资源,而是构建网页和应用程序所需的资源。 如果客户完全了解该资源,则不需要这些资源。 客户端可以使用资源信息进行POSTPUT调用,并根据需要创建或更新资源。 但由于用户不需要知道资源的来龙去脉,他们需要一个更简单的界面来处理创建或更新。

如果所有用户都充分意识到资源,并且熟悉命令行,我们甚至不需要HTML。 他们可以在与这些资源的交互中curl :)

index使得更容易处理集合。 它仍然是一个明确定义的资源,并具有独特的表现形式,例如/books 。 它如何在服务器端处理代码并不会导致RESTless (我刚刚做出来,但它很棒)。


我将从罗伊·菲尔丁的论文第五章开始。 有几个基本原则:

  • 资源:资源可能通常是您作为服务的一部分向外界公开的内容。 重点是识别资源(例如:Book,UserList,CalculateDistance)
  • URI:给每个资源一个标识符(例如:example.com/books/7654)
  • 统一接口:使用标准方法,如GET,PUT。 POST,DELETE,HEAD,OPTIONS
  • 表述:资源可以有多个表示。 例如,一本书上的GET可以返回该书内容的PDF,内容的HTML以及相关内容的HTML,甚至包括带书封面的GIF等等。 表示本质上是所有数据和标记的集合。
  • 超媒体:在我看来,这是一个非常重要的原则。 这个原则的实现使得你的应用远远领先于REST风格所定义的常规CRUD类定义。 HATEOAS是代表超媒体作为应用程序状态引擎的首字母缩写词。 当你点击链接或提交表单时,你正在改变应用程序的状态,这是通过超链接(或超媒体)发生的。 服务器和客户端之间几乎没有耦合。 客户端通过服务器提供的链接浏览应用程序。 (博客上有很多关于这个原则的讨论......)[也看看Restfulie]
  • 我最近回答了一个关于学习REST的好资源的问题,可能会有帮助。

    我对Rails不熟悉,所以没有解决这个问题的部分。


    这是我关于REST的基本概述。 我试图在RESTful体系结构中展示每个组件背后的思想,以便理解这个概念更直观。 希望这有助于为某些人揭开REST的神秘面纱!

    REST(具象状态传输)是一种设计架构,概述了网络资源(即共享信息的节点)是如何设计和解决的。 通常,RESTful体系结构使得客户端(请求机器)和服务器(响应机器)可以请求读取,写入和更新数据,而无需客户端知道服务器如何操作并且服务器可以通过它不需要知道关于客户端的任何信息。 好的,很酷......但我们如何在实践中做到这一点?

  • 最明显的要求是需要有某种通用语言,以便服务器可以告诉客户端正在尝试处理请求以及服务器做出响应。

  • 但是要找到任何给定的资源,然后告诉客户资源的存在地点,需要有一种指向资源的普遍方式。 这是通用资源标识符(URI)进入的地方; 他们基本上是唯一的地址来寻找资源。

  • 但是REST架构并没有在那里结束! 虽然上述内容满足了我们所需的基本需求,但我们还希望拥有支持高流量流量的体系结构,因为任何给定的服务器通常都会处理来自多个客户端的响应。 因此,我们不想通过让服务器记住以前的请求信息来压倒服务器。

  • 因此,我们强制规定客户端和服务器之间的每个请求 - 响应对都是独立的,这意味着服务器不必记住以前的任何请求(客户端 - 服务器交互的先前状态)以响应新的请求。 这意味着我们希望我们的交互是无状态的。

  • 为了进一步缓解我们服务器上重复计算的压力,这些计算最近已经针对给定客户端完成,REST还允许缓存。 基本上,缓存意味着拍摄提供给客户的初始响应的快照。 如果客户端再次发出相同的请求,则服务器可以为客户端提供快照,而不是重新创建初始响应所需的所有计算。 但是,由于它是一个快照,如果快照未到期 - 服务器预先设置了到期时间 - 并且自初始缓存后响应已更新(即请求会给出与缓存的响应不同的答案) ,直到缓存过期(或缓存被清除)并且响应再次从头开始渲染,客户端才会看到更新。

  • 关于RESTful体系结构的最后一件事情是它们是分层的。 实际上,我们在讨论客户端和服务器之间的交互时已经暗含了讨论这个要求。 基本上,这意味着我们系统中的每一层只与相邻层交互。 因此,在我们的讨论中,客户端层与我们的服务器层交互(反之亦然),但可能有其他服务器层帮助主服务器处理客户端不直接与之通信的请求。 相反,服务器根据需要传递请求。

  • 现在,如果所有这些听起来很熟悉,那么很好。 通过万维网定义通信协议的超文本传输​​协议(HTTP)是RESTful体系结构(或者如果你像我这样的OOP狂热者的REST类的实例)的抽象概念的实现。 在REST的这个实现中,客户端和服务器通过GET,POST,PUT,DELETE等进行交互,这些是通用语言的一部分,并且可以使用URL指向资源。

    链接地址: http://www.djcxy.com/p/71301.html

    上一篇: What exactly is REST architecture and how is it implemented in Rails?

    下一篇: What is REST? Slightly confused