我理解(我认为)RESTful-ness背后的基本理念。在语义上使用HTTP方法 - GET获取,PUT put,DELETE删除等等......对吗?认为我理解REST背后的想法,但我认为我对HTTP实现的细节感到困惑。休息背后的驱动理念是什么,为什么这成为一件重要的事情?人们实际上已经使用了很长时间,在我的手电筒从未照过的互联网的一角?
答案 0 :(得分:54)
这可能是REST的样子:
POST /user
fname=John&lname=Doe&age=25
服务器响应:
201 Created
Location: /user/123
将来,您可以检索用户信息:
GET /user/123
服务器响应(假设XML响应):
200 OK
<user><fname>John</fname><lname>Doe</lname><age>25</age></user>
更新:
PUT /user/123
fname=Johnny
答案 1 :(得分:18)
这是我的观点......
制作RESTful服务的吸引力在于,我们不是使用许多功能方法创建Web服务,而是标准化四种方法(创建,检索,更新,销毁):
REST越来越受欢迎,因为它也代表了应用层的消息传递格式的标准化。虽然HTTP使用REST的四个基本动词,但HTML的常见HTTP消息格式不是构建应用程序的合同。
我听到的最好的解释是将TCP / IP与RSS进行比较。
以太网代表物理网络的标准化。 Internet协议(IP)代表堆栈中较高的标准化,并具有多种不同的风格(TCP,UDP等)。引入了“传输控制协议”(保证数据包传送)定义的通信合同,为应用层打开了一整套新的服务(FTP,Gopher,Telnet,HTTP)。
在类比中,我们采用XML作为“协议”,我们现在开始标准化消息格式。 RSS 正在迅速成为许多RESTful服务的基础。 Google的GData API是RSS / ATOM版本。
“桌面小工具”是这种炒作的一个很好的实现:一个简单的客户端可以使用通用的API和消息传递标准来使用基本的Web内容或复杂的mashup。
答案 2 :(得分:11)
HTTP目前使用不足且使用不当。
我们通常只使用两种HTTP方法:GET和POST,但还有一些方法:DELETE,PUT等(http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html)
因此,如果我们拥有由RESTful URL定义的资源(应用程序中的每个域对象都具有http://yoursite.com/path/to/the/resource形式的唯一URL)和正确的HTTP实现,我们可以通过编写句子来操作域中的对象:
获取http://yoursite.com/path/to/the/resource
删除http://yoursite.com/path/to/the/resource
POST http://yoursite.com/path/to/the/resource
等
架构很好,一切都很好。
但这仅仅是理论观点,现实场景在我之前的答案中发布的所有链接中都有描述。
答案 3 :(得分:10)
让我们回顾历史,谈谈罗伊菲尔丁研究 - “Architectural Styles and the Design of Network-based Software Architectures”。它是一篇大论文,讲述了很多不同的东西。但作为标准工程师您想如何解释REST(Representational State Transfer)的明确含义,以及它的建筑风格。
以下是我的解释方式 - “什么是REST”。
请参阅运行在各种硬件之上的此www(万维网),例如路由器,服务器,防火墙,云基础设施,交换机,LAN,WAN。这个www(万维网)的总体目标是分发hypermedia。这个万维网配备了各种服务,例如基于信息的服务,网站,YouTube频道,动态网站,静态网站。这个万维网使用HTTP协议通过客户端/服务器机制在全球范围内分发超媒体。此HTTP协议在TCP / IP或其他适当的网络堆栈之上工作。
这个HTTP protocol使用八种方法来管理“分配协议”或“分布式建筑风格”。这八种方法是:OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT。
但是在这个HTTP之上,Web应用程序正在使用自己的方式分发超媒体,例如Web应用程序正在使用与客户端和服务器高度相关的Web服务,或者'Web应用程序正在使用自己设计的客户端/服务器的方式在HTTP之上建立这种分发渠道的机制。
Roy Fielding Research说,这八种方法OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT是如此成功,可以在各种硬件资源的基础上向世界各地提供HyperMedia和客户/服务器机制的网络堆栈,为什么我们不使用类似的策略与我们的基于Web的应用程序。在这个GET上,POST,DELETE和PUT被最多使用。所以有四种方法可以将HyperMedia传递到全世界。
在REST API Architecture Style 应用程序中,Web应用程序需要设计业务逻辑(驻留在服务器中,例如Tomcat,Apache HTTP)和所有对象实体(例如,Customer一个实体)和可能的操作(例如,基于客户ID的'检索客户信息')。使用这些实体的那些可能的操作应该设计有四个主要操作或方法,即创建,检索,更新,删除。这些实体称为资源,这些实体以表格形式呈现或代表 JSON或XML或其他东西。我们有客户端(浏览器)调用创建,检索,更新,删除(CRUD)方法来对服务器中的此类资源驻留执行适当的功能。
但正如 Representation 的概念所解释的那样,意味着业务逻辑或对象的实体的表示方式。但是“国家转移”怎么样?。
状态转移,它谈到了从客户端到服务器的“通信状态”。它讨论了从客户端到服务器的“状态转移”的设计,例如客户首先调用“创建客户”操作,在调用该客户的下一个状态或客户可以调用的客户状态之后。它的状态可能是“检索创建的客户数据”,“更新客户数据”或什么
答案 4 :(得分:5)
REST是一种定义和解决资源的架构。
要最好地理解REST,您应该查看Resource Oriented Architecture (ROA),它为实际实现REST架构提供了一套指导原则。
REST不需要通过HTTP,但它是最常见的。 REST最初是由HTTP的创建者之一创建的。