Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 你能解释一下RESTful的Web概念吗?_Web Services_Rest - Fatal编程技术网

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

Web services 你能解释一下RESTful的Web概念吗?,web-services,rest,Web Services,Rest,寻找这个概念的清晰和简洁的解释 这意味着使用名称来标识命令和参数 名称本身包含信息,而不仅仅是句柄或名字。具体来说,是关于请求内容、请求参数等的信息 名称不是“根”,而是操作加输入数据。RESTful应用程序是一种将其状态和功能公开为一组资源的应用程序,客户端可以对其进行操作,并遵循一定的原则: 所有资源都是唯一可寻址的,通常通过URI;不过,也可以使用其他地址 所有资源都可以通过一组受约束的已知操作进行操作,通常是CRUD(创建、读取、更新、删除),通常通过HTTP的POST、GET、PUT

寻找这个概念的清晰和简洁的解释

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

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


名称不是“根”,而是操作加输入数据。

RESTful应用程序是一种将其状态和功能公开为一组资源的应用程序,客户端可以对其进行操作,并遵循一定的原则:

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

Tim Scott指出的例子提供了有关REST起源、详细原理、示例等的更多细节。

坦率地说,答案取决于上下文。REST和RESTful的含义取决于您使用的语言或框架,或者您试图实现的目标。既然您已将问题标记在“web服务”下,我将在RESTful web服务的上下文中回答您的问题,RESTful web服务仍然是一个广泛的类别

RESTful web服务可以表示任何内容,从严格的REST解释(所有操作都以严格的“RESTful”方式完成)到纯XML协议(即它不是SOAP或XMLRPC)。在后一种情况下,这是一个误称:这样的REST协议实际上是一个协议。虽然REST协议通常使用XML,因此是POX协议,但情况并非如此,反之亦然(仅仅因为协议使用XML并不意味着它是RESTful的)

无需进一步的ado,真正的RESTful API由对对象执行的操作组成,这些操作由所使用的HTTP方法和该对象的URL表示。操作与数据有关,而与方法的功能无关。例如,CRUD操作(创建、读取、更新和删除)可以映射到一组特定的URL和操作。假设您正在与照片API交互

  • 要创建照片,您需要通过POST请求将数据发送到/photos。它会通过位置标题让您知道照片的位置,例如/photos/12345
  • 要查看照片,请使用GET/photos/12345
  • 要更新照片,您需要通过PUT请求将数据发送到/photos/12345
  • 要删除照片,请使用delete/photos/12345
  • 要获取照片列表,请使用get/photos
还可以执行其他操作,例如通过复制请求复制照片

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

  • 要创建照片,请将帖子发送到/photos/create
  • 要查看照片,请发送GET-To/photos/view/12345
  • 要更新照片,请将帖子发送到/photos/update/12345
  • 要删除照片,请发送GET-To/photos/delete/12345
  • 要获取照片列表,请发送get-To/photos/list
您将注意到,在这种情况下,URL是如何不同的,选择方法只是出于技术需要:要发送数据,您必须使用POST,而所有其他请求都使用GET。

只有几点:

  • RESTFul不依赖于您使用的框架。这取决于它所描述的建筑风格。如果你不遵循这些约束,你就不能休息。Roy Fielding文档第5章的半页中定义了这些约束条件,我鼓励您去阅读
  • 标识符是不透明的,不包含资源标识之外的任何信息。这是一个nmae,不是输入数据,只是名称。就客户机而言,除了知道如何从表单标记构建querystring之外,它没有任何逻辑或价值。如果您的客户机使用预先确定的模式构建自己的URI,那么您就不是restful
  • 是否使用所有http谓词并不是真正的限制,设计一个只支持POST的架构是完全可以接受的
  • 缓存、高度解耦、缺少会话状态和分层体系结构是很少有人谈论的要点,但对于RESTful体系结构的成功最为重要

如果你没有花大部分时间来设计文档格式,那么你可能没有做其他工作。

我发现最好的解释就是这样。

我从InfoQ.com上发表的文章中学到了最多: 以及restfulweb服务手册()

/亚历克斯


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

举个例子:

POST /user
fname=John&lname=Doe&age=25
服务器响应:

200 OK
Location: /user/123
200 OK
<fname>John</fname><lname>Doe</lname><age>25</age>
以后,您可以检索用户信息:

GET /user/123
服务器响应:

200 OK
Location: /user/123
200 OK
<fname>John</fname><lname>Doe</lname><age>25</age>

实际上,POST用于表示Create和PUT-to-Update。然而,由于一些服务器实现不支持本地PUT,这两种操作的POST都会过载。这确实是一个有争议的问题。PUT通常用于创建。:)对不起,没有争议。:-)RFC2616精确地指定了操作