什么是REST?有点困惑[关闭]


155

我当时以为REST是Web服务,但是似乎我在思考这一点上是不正确的-REST是什么?

我已经阅读了Wikipedia,但仍然无法完全解决。为什么有很多地方将API称为REST API?


21
@约翰·桑德斯:这怎么可能重复?另一个人显然知道REST是什么,而另一方面,Nathan感到困惑。
Fake Code Monkey Rashid

我觉得对方会回答他的问题。如果没有其他人同意,那么亲密投票将到期。对于这个问题,我们大约有十个答案。只需单击“ rest”标签,您将看到所有标签。
约翰·桑德斯

1
REST是用于构建Web服务的一组规则。如果根据这些规则构建API,则它是REST API。我如何向橡皮鸭解释REST非正式地解释了其中一些规则。
User42

Answers:


127

REST不是特定的Web服务,而是用于管理状态信息的设计概念(体系结构)。关于此的开创性论文是Roy Thomas Fielding的论文(2000),“建筑风格和基于网络的软件体系结构设计”(从加利福尼亚大学欧文分校在线获得)。

首先阅读Ryan Tomayko的帖子我如何向妻子解释REST;这是一个很好的起点。然后阅读菲尔丁的实际论文。它不是那么先进,也不是很长(六章,共180页)!(我知道你在学校的孩子们喜欢它简短)。

编辑:我觉得尝试解释REST是没有意义的。它具有许多概念,例如可伸缩性,可见性(无状态)等,读者需要掌握,而理解这些概念的最佳来源就是实际的论文。它远远不止POST / GET等。


@Nathan,相信我,我遇到了与您以前相同的问题。阅读论文,也许慢慢地遍历一下,但是您将掌握这个概念,实际上一点都不难。人们只是倾向于不好地解释它。
Anders

当开发人员尝试使用REST和尝试这样做只能在他们的代码(不使用REST考虑规划整个系统),地狱来:-)
karatedog

@Anders,考虑到REST是什么,如何与REST和Web Services进行比较?
囚犯


1
也许本章就足够了,而不用阅读整个论文:ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
andilabs 2013年

74

REST是通常用于Web应用程序的软件设计模式。用外行的话来说,这意味着它是许多不同项目中常用的想法。它代表代表状态转移。REST的基本思想是将服务器端的对象(如数据库表中的行中)视为可以创建或销毁的资源。

考虑REST的最基本方法是格式化Web应用程序URL的方法。例如,如果您的资源称为“帖子”,则:

/posts 用户将如何访问所有帖子以进行显示。

/posts/:id 用户将如何访问和查看基于其唯一ID检索的单个帖子。

/posts/new 您将以这种方式显示用于创建新帖子的表单。

发送POST请求到/users您将实际创建的方式在数据库级别新帖子的方式。

将PUT请求发送到 /users/:id将是您如何更新给定帖子的属性(再次由唯一ID标识)的方式。

发送一个DELETE请求到 /users/:id将是您如何删除给定帖子的方法,同样由唯一ID标识。

据我了解,REST模式主要是由Ruby on Rails框架(针对Web应用程序)推广的,该框架非常重视RESTful路由。我对此可能是错的。

我可能不是最有资格谈论它的人,但这就是我学到的方法(特别是对于Rails开发)。

当有人提到“ REST api”时,通常指的是使用RESTful url检索数据的api。


2
您很幸运,因为Rails是基于REST原理构建的,并且如果您使用Rails工具,您的代码将是RESTful的。但是,那里的编码人员不了解REST,他们编码所需的内容,最后使用这种“ URL格式”,因为它很流行。
karatedog

8
在/ users中使用过此答案的地方,应该不是/ posts吗?
Mayuresh Srivastava'7

@MayureshSrivastava请注意,PUT示例具有:id,而POST示例则没有:id。Google讲述了其余的故事。(POST:不安全,不等幂; PUT:不安全,等幂)
Ajeet Ganga

38

REST是一种基于网络的软件体系结构的体系结构样式设计

REST概念称为资源。资源的表示形式必须是无状态的。它通过某种媒体类型表示。媒体类型的一些例子包括XMLJSON,和RDF。资源由组件操纵。组件通过标准的统一接口请求和操纵资源。在HTTP的情况下,该接口由标准HTTP OPS例如GETPUTPOSTDELETE

REST通常在上使用HTTP,主要是因为HTTP的简单性及其对RESTful原理的非常自然的映射。REST然而不限于任何特定协议。

基本REST原则

客户端-服务器通信

客户端-服务器体系结构的关注点非常不同。原则上,以RESTful样式构建的所有应用程序也必须是客户端服务器。

无状态

对服务器的每个客户端请求都要求其状态被完全表示。服务器必须能够完全理解客户端请求,而无需使用任何服务器上下文或服务器会话状态。因此,所有状态都必须保留在客户端上。稍后我们将更详细地讨论无状态表示。

可缓存的

可以使用缓存约束,从而使响应数据能够被标记为可缓存或不可缓存。任何标记为可缓存的数据都可以重用作为对同一后续请求的响应。

统一界面

所有组件都必须通过一个统一的界面进行交互。因为所有组件交互都是通过此接口发生的,所以与不同服务的交互非常简单。界面是一样的!这也意味着可以单独进行实现更改。这样的更改不会影响基本组件的交互,因为统一接口始终不变。一个缺点是您被接口卡住了。如果可以通过更改接口将优化提供给特定服务,那么您就不走运了,因为REST禁止这样做。从好的方面来说,REST是针对Web优化的,因此REST在HTTP上的普及程度令人难以置信!

以上概念代表了REST的定义特征,并将REST体系结构与其他体系结构(如Web服务)区分开来。值得注意的是,REST服务是Web服务,但是Web服务不一定是REST服务。

有关REST和上述原理的更多详细信息,请参阅有关REST设计原理的博客文章


15

它代表代表性状态转移,它可能意味着很多事情,但是通常当您谈论API和应用程序时,您所谈论的是REST作为一种做Web服务或获取程序进行Web交谈的方式。

REST基本上是系统之间进行通信的一种方式,它完成了SOAP RPC的大部分工作,但是SOAP通常建立连接,进行身份验证,然后对该连接进行处理,而REST的工作方式与Web的工作方式几乎相同。 。您有一个URL,当您请求该URL时,您会得到一些回报。由于人们将Web描述为最大的REST应用程序,因此这开始变得令人困惑,尽管从技术上讲这是正确的,但它并不能真正帮助解释它是什么。

简而言之,REST允许您使用类似于Web浏览器使用的工具来使两个应用程序通过Internet进行通信。这比SOAP简单得多,REST所做的很多事情都说:“嘿,事情不必这么复杂。”

值得读:


REST是基于约束的体系结构,SOAP是协议,那些是完全不同的东西。我不喜欢人们在同一概念中谈论SOAP和REST,也难怪人们对此感到困惑。
Anders

@Anders-他说他正在研究REST API,并认为这是使用Web服务的一种方式。您可以像这样使用REST,并且以这种能力可以完成SOAP的大部分工作。也可以将Web称为世界上最大的RESTful应用程序,但这并不能真正解释您将使用REST API的目的。
标记

实际上,这是我的主要问题,看到REST和SOAP具有相同的概念。看来API在设计上只是RESTful。
囚犯

4

http://en.wikipedia.org/wiki/Representational_State_Transfer

基本思想是,您无需发出持续的服务器连接,而是发出请求,获取一些数据,并显示给用户,但不一定全部显示给用户,然后当用户执行需要更多数据的操作时,或将一些数据传递给服务器,客户端将更改更改为新状态。


3
也许只有我一个人,但我喜欢看到有关stackoverflow的相关答案以及适当的引用。只是逗我笑,并假设维基百科变得po琐。那么,您的链接有什么用处?:)
伪造代码Monkey Rashid

1
@Hack Saw:那不是您的答案吗?
Fake Code Monkey Rashid

我刚刚注意到编辑功能。:)
Hack Saw

1
@karatedog:REST可以通过HTTP来实现,但是可以通过多种数据传输方法来实现。
Hack Saw

1
这是您正在编写的HTTP协议,REST是一种体系结构。
karatedog
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.