你能解释一下RESTful的Web概念吗?

时间:2009-02-16 00:42:34

标签: web-services rest

寻找这个概念的简明扼要的解释。

7 个答案:

答案 0 :(得分:36)

RESTful应用程序是一种应用程序,它将其状态和功能公开为客户端可以操作并符合某组原则的一组资源:

  • 所有资源都是唯一可寻址的,通常是通过URI;但是,也可以使用其他寻址。
  • 所有资源都可以通过一组有约束的众所周知的动作来操纵,通常是CRUD(创建,读取,更新,删除),最常通过HTTP的POST,GET,PUT和DELETE表示;它可以是不同的集合或子集 - 例如,某些实现将该集合限制为仅读取和修改(GET和PUT),例如
  • 所有资源的数据都通过任意数量的众所周知的表示形式传输,通常是HTML,XML或JSON;
  • 客户端和应用程序之间的通信是通过无状态协议执行的,该协议允许多个分层中介,它们可以为客户端和应用程序透明地重新路由和缓存请求和响应数据包。

Tim Scott指出的Wikipedia article提供了有关REST起源,详细原则,示例等的更多详细信息。

答案 1 :(得分:12)

我找到的最佳解释是REST tutorial

答案 2 :(得分:10)

REST举例:

POST /user
fname=John&lname=Doe&age=25

服务器响应:

200 OK
Location: /user/123

将来,您可以检索用户信息:

GET /user/123

服务器响应:

200 OK
<fname>John</fname><lname>Doe</lname><age>25</age>

更新:

PUT /user/123
fname=Johnny

答案 3 :(得分:6)

坦率地说,答案取决于背景。 REST和RESTful具有意义,取决于您正在使用的语言或框架或您要完成的任务。由于您已经在“网络服务”下标记了您的问题,我将在RESTful网络服务的背景下回答,这仍然是一个广泛的类别。

RESTful Web服务可以表示从严格的REST解释(其中所有操作都以严格的“RESTful”方式完成)到纯XML协议(即非SOAP或XMLRPC)。在后一种情况下,这是一个误称:这样的REST协议实际上是"plain old XML" (or "POX") protocol。虽然REST协议通常使用XML,因此也就是POX协议,但并不一定是这种情况,反之亦然(仅仅因为协议使用XML并不能使其成为RESTful)。

不用多说,真正的RESTful API包括对对象采取的操作,由使用的HTTP方法和该对象的URL表示。这些操作与数据有关,而与方法的作用无关。例如,CRUD操作(创建,读取,更新和删除)可以映射到某组URL和操作。假设您正在与照片API进行交互。

  • 要创建照片,您需要通过POST请求将数据发送到/ photos。它会通过位置标题让您知道照片的位置,例如/照片/ 12345
  • 要查看照片,请使用GET / photos / 12345
  • 要更新照片,您需要通过PUT请求将数据发送到/ photos / 12345.
  • 要删除照片,请使用DELETE / photos / 12345
  • 要获取照片列表,您需要使用GET /照片。

可能会执行其他操作,例如通过COPY请求复制照片的功能。

通过这种方式,您使用的HTTP方法直接映射到您的调用意图,而不是将您希望采取的操作作为API的一部分发送。相比之下,非RESTful API可能会使用更多URL,并且只使用GET和POST操作。因此,在此示例中,您可能会看到:

  • 要创建照片,请将POST发送至/ photos / create
  • 要查看照片,请将GET发送至/ photos / view / 12345
  • 要更新照片,请将POST发送至/ photos / update / 12345
  • 要删除照片,请将GET发送至/ photos / delete / 12345
  • 要获取照片列表,请将GET发送到/ photos / list

你会注意到在这种情况下URL是如何不同的,并且只是出于技术需要而选择方法:要发送数据,你必须使用POST,而所有其他请求都使用GET。

答案 4 :(得分:5)

只需几点:

  • RESTFul不依赖于您使用的框架。这取决于它描述的建筑风格。如果你不遵守约束,你就不是RESTful。这些约束在Roy Fielding的文档第5章的半页中定义,我鼓励你去阅读它。
  • 标识符是不透明的,不会保留除资源标识之外的任何信息。这是一个nmae,而不是输入数据,只是名称。就客户而言,除了知道如何从表单标签构建查询字符串之外,它没有任何逻辑或价值。如果您的客户端使用您已预先确定的架构构建自己的URI,那么您就不会感到安宁。
  • 使用或不使用所有http动词并不是真正的约束,设计一个只支持POST的架构是完全可以接受的。
  • 缓存,高度去耦,缺乏会话状态和分层架构是很少谈论的,但对RESTful架构的成功最重要。

如果您没有花费大部分时间来制作文档格式,那么您可能不会使用REST。

答案 5 :(得分:2)

这意味着使用名称来识别命令和参数。

名称本身不包含仅仅是句柄或名字的名称,而是包含信息。具体而言,有关请求内容,请求参数等的信息。

名称不是“根”,而是行动加输入数据。

答案 6 :(得分:1)

我从阅读InfoQ.com上发布的文章中学到的最多: http://www.infoq.com/rest和RESTful Web服务预订(http://oreilly.com/catalog/9780596529260/)。

./亚历

免责声明:与InfoQ.com相关联,但此推荐基于我自己的学习经验。