寻找这个概念的清晰简洁的解释.
RESTful应用程序是一种应用程序,它将其状态和功能公开为一组客户端可以操作并符合某组原则的资源:
所有资源都是唯一可寻址的,通常是通过URI; 但是,也可以使用其他寻址.
所有资源都可以通过一组有限的众所周知的动作来操纵,通常是CRUD(创建,读取,更新,删除),最常通过HTTP的POST,GET,PUT和DELETE表示; 它可以是不同的集合或子集 - 例如,某些实现将该集合限制为仅读取和修改(GET和PUT),例如
所有资源的数据都通过任何有限数量的众所周知的表示形式传输,通常是HTML,XML或JSON;
客户端和应用程序之间的通信是通过无状态协议执行的,该协议允许多个分层中介,它们可以为客户端和应用程序透明地重新路由和缓存请求和响应数据包.
Tim Scott指出的维基百科文章提供了有关REST起源,详细原则,示例等的更多详细信息.
我找到的最好的解释是在这个REST教程中.
REST通过一个例子:
POST /user fname=John&lname=Doe&age=25
服务器响应:
200 OK Location: /user/123
将来,您可以检索用户信息:
GET /user/123
服务器响应:
200 OKJohn Doe 25
更新:
PUT /user/123 fname=Johnny
坦率地说,答案取决于背景.REST和RESTful具有意义,取决于您正在使用的语言或框架或您要完成的任务.既然您已经在"网络服务"下标记了您的问题,我将在RESTful网络服务的背景下回答,这仍然是一个广泛的类别.
RESTful Web服务可以表示任何内容,从严格的REST解释(所有操作都以严格的"RESTful"方式完成)到纯XML协议,这意味着它不是SOAP或XMLRPC.在后一种情况下,这是一个误称:这种REST协议实际上是一种"普通的旧XML"(或"POX")协议.虽然REST协议通常使用XML,因此它们是POX协议,但并不一定是这种情况,反之亦然(仅仅因为协议使用XML并不能使其成为RESTful).
不用多说,真正的RESTful API包括对对象采取的操作,由使用的HTTP方法和该对象的URL表示.这些操作与数据有关,而与方法的作用无关.例如,CRUD操作(创建,读取,更新和删除)可以映射到某组URL和操作.假设您正在与照片API进行交互.
要创建照片,您需要通过POST请求将数据发送到/ photos.它会通过Location标题让您知道照片的位置,例如/ 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.
只需几点:
RESTFul不依赖于您使用的框架.这取决于它描述的建筑风格.如果你不遵守约束,你就不是RESTful.这些约束在Roy Fielding的文档第5章的半页中定义,我鼓励你去阅读它.
标识符是不透明的,并且不会识别资源标识之外的任何信息.这是一个nmae,而不是输入数据,只是名称.就客户而言,除了知道如何从表单标签构建查询字符串之外,它没有任何逻辑或价值.如果您的客户端使用您已预先确定的架构构建自己的URI,那么您就不会感到安宁.
使用或不使用所有http动词并不是真正的约束,设计一个只支持POST的架构是完全可以接受的.
高速缓存,高度去耦,缺乏会话状态和分层体系结构是很少谈论的,但对于RESTful体系结构的成功最重要.
如果您没有花费大部分时间来制作文档格式,那么您可能不会使用REST.