REST和RESTful有什么区别


540

REST系统和RESTful系统之间有什么区别?

从我读得最多的几件事中,所谓的REST服务实际上就是RESTful服务。那么两者之间有什么区别。


3
提出这个问题的原因是因为如果您阅读链接中的文章并查找Fielding博士对大多数REST实现的看法,那么它们根本不是REST系统。它们表现出RESTful行为,但不能归类为REST系统。
AwkwardCoder

4
我读了这篇文章,但我认为它不会导致他在语义上无用的区别。
2009年

3
Wikipedia上有关REST的文章-en.wikipedia.org/wiki/Representational_State_Transfer-第二段-“符合REST约束通常被称为“ RESTful”。
Nate

1
@PramodNikumbh在下面正确回答了这个问题。“ REST”系统是适合更广泛的REST定义的系统。它至少表现出一些休息原则。“有趣的”描述了一个更加符合REST的系统。
安德鲁·诺曼

好吧,我认为名称有一个混淆,RESTful中的“ ful”将混淆无状态和有状态,而我个人认为这是两种不同的东西,REST和RESTful必须是无状态的。想象一个名为RESTles的有状态REST。:)
Waheed

Answers:


487

代表性状态转移(REST)是一种软件体系结构。正如Roy Fielding在论文中所描述的那样,REST是一种“建筑风格”,它基本上利用了Web的现有技术和协议。

RESTful通常用于指代实现这种架构的Web服务。


146
那么REST是架构,而RESTful是形容词吗?
manei_cc 2014年

4
@manei_cc:尽管在实践中您会找到名为RESTful的服务,但这些服务不遵循REST架构,并且基本上类似于REST,想要使用REST等。因此请始终注意,“ RESTful服务”不一定使用REST构建架构,但正如Justin Ethier所写的那样:利用Web的现有技术和协议
Azder 2014年

7
RESTful应该用于真正尊重REST的API。我看到太多仅使用GET或POST的“ REST” Web服务。RESTful强调完全使用HTTP动词和URL命名约定。但这是我的观点。
马丁

1
architect什么?网址?像https://translation.googleapis.com/language/translate/v2这样的REST风格?
阿西夫·穆斯塔克


192

基于REST的服务/架构与RESTFUL服务/架构

为了区分或比较这两个,您应该知道什么是REST

REST(RE表象的小号泰特Ť转让(BOT))基本上是具有一定的原则发展的建筑风格:

  • 它应该是无状态的

  • 它应该仅使用URI访问服务器上的所有资源

  • 它没有内置的加密

  • 没有会议

  • 它仅使用一种协议-HTTP

  • 对于执行CRUD操作,就应该使用HTTP动词如getpostputdelete

  • 它只能以JSON或XML,atom,OData等形式(轻量级数据)返回结果。

REST based services 遵循上述某些原则,而非全部

RESTFUL services 表示它遵循以上所有原则。

它类似于以下概念:

Object-based languages支持所有OOP概念,例如 C ++,C#

Object oriented languages支持一些OOPs功能,例如:JavaScript,VB


REST-BasedMicrosoft Microsoft Web API是ASP Dot NET MVC 4RESTFul

MVC仅支持上述某些REST原则,而WEB API支持所有上述的REST原则。

MVC仅支持REST API中的以下内容

  • 我们可以使用URI访问资源

  • 它支持HTTP动词以从服务器访问资源

  • 它可以以JSON,XML的形式(即HTTPResponse)返回结果。

但是,同时在MVC中

  • 我们可以使用会议

  • 我们可以使其状态化

  • 我们可以从控制器操作方法中返回视频或图像,该方法基本上违反了REST原理

这就是为什么MVC是MVC的原因,REST-Based而WEB API支持上述所有原理并且是RESTFul


10
我不明白为什么这会被否决,这个答案为这个问题带来了很多澄清的信息。
Marcovecchio '16

5
迄今为止最好的答案
利蒙

2
这是最好的答案。
马里奥Meyrelles

2
您可以将FTP与REST一起使用。请参阅:stackoverflow.com/questions/35534812/…–
crazyTech

7
上面“基于对象”和“面向对象”类别下的语言是相反的。面向对象的语言遵循所有OOPS原则,而基于对象的语言遵循某些原则。
Mrchief

119

“ REST”是一种架构范例。“ RESTful”描述了使用该范例。


architect什么?网址?像https://translation.googleapis.com/language/translate/v2这样的REST风格?
阿西夫·穆斯塔克

2
REST体系结构需要许多特征。您不能仅通过显示URL就能说出符合REST原则的内容。
SingleShot


29

REST代表代表性的状态转移。这意味着状态本身不会被转移,而仅仅是状态的代表。最常见的示例是基于纯HTML服务器的应用程序(没有javascript)。浏览器对应用程序本身一无所知,但是通过链接和资源,服务器能够将应用程序的状态传输到浏览器。在正常的Windows应用程序中,按钮通常会更改状态变量(例如,打开页面),而在浏览器中,您具有一个表示这种状态更改的链接。

这个想法是使用超媒体。也许要创建新的超媒体类型。潜在地,我们可以使用javascript / AJAX扩展浏览器并创建新的自定义超媒体类型。我们将拥有一个真正的REST应用程序。

这是我所代表的REST的简短版本,问题在于它难以实现。当我想参考REST原理时,我个人说过RESTful,但我知道我并没有真正实现REST的整个概念。我们并不是真的说SOAPful,因为您是否使用过SOAP。我认为大多数人都不会像创建者Roy Fielding所设想的那样进行REST,我们实际上是在实现RESTful或类似REST的体系结构。您可以看到他的论文,并且会找到REST的首字母缩写,但是没有RESTful这个词。



13

感谢您的回答。阅读Alex Rodriguez的这篇文章该文章建议RESTful Web服务具有4个基本特征,这些特征是:

  1. 明确使用HTTP方法。
  2. 无国籍。
  3. 公开类似目录结构的URI。
  4. 传输XML,JavaScript对象表示法(JSON)或同时传输两者。

它实际上有6个约束。
IronBlossom

2
@IronBlossom Care是否使用缺少的两个来更新答案?
保罗·弗莱明

1
链接
断开

10

代表性状态转移(REST)是一种用于分布式超媒体系统(例如,万维网)的软件体系结构样式。代表性国家转移一词是由Roy Fielding 1 [2]在其博士论文中于2000年引入并定义的。Fielding是超文本传输​​协议(HTTP)规范版本1.0和1.1的主要作者之一。符合REST约束的条件称为“ RESTful”。资料来源:维基百科


8

Web服务本质上是网站,其内容是由计算机程序而非人员消费的。REST是一组体系结构原则,规定Web服务应最大程度地利用HTTP和其他Web标准,以便程序获得人们已经可以从网络中获得的所有好处。REST通常与SOAP Web服务以及其他面向“远程过程调用”的Web服务形成对比。

Stefan Tilkov在Parleys.com上关于REST的演讲相当不错,尤其是这一演讲。

对于一本书来说,没有什么比Richardson和Ruby的Restful Web Services更好。


因此,普通网站可以视为REST应用程序吗?
yoyo_fun '16

1
@yoyo_fun:是的,常规网站也可以RESTful地构建。从某种程度上讲,服务器是将HTML返回给人类还是将JSON(例如)返回给程序是无关紧要的。
吉姆·弗兰斯


4

理查森成熟度模型中定义了4级API。这些定义为:

  • 级别0:任何系统的所有api都具有单个端点的系统(SOAP或RPC属于此类别)。级别0的api也可能类似于“命令”。

  • 级别1:ResourceUri描述的系统。这是一个定义多个基于实体的URI的系统(而不是像0级系统那样具有单个端点)。这些URI可以使用不同的http操作(POST,GET,PUT等)来针对该资源实施不同的操作。

  • 级别2:又称为级别1,带有标准HTTP方法/动词和多状态代码响应的兼容使用

  • 3级:又名2级加上HATEOAS(响应中包含的超媒体,它描述了您可以拨打的其他电话)

虽然可以将级别1,级别2和级别3视为REST系统,但是只有更严格的级别(即级别2和级别3)才被认为是RESTful。

因此,基本上所有RESTful API都是REST API,但并非所有REST API都是RESTful

理查森成熟度模型的定义


2

将REST视为体系结构的“类”,而RESTful是该类的众所周知的“实例”。

请介意“”;我们不在这里处理“真实的”编程对象。


1

“ REST服务”和“ RESTful服务”是相同的。

RESTful系统是遵循原始文档中创建RESTful网络应用程序概念的REST约定的任何系统。

值得注意的是,RESTfulness的级别各不相同。总体而言,REST是一种样式,而不是一种标准,因此存在根据需求进行解释的空间。一个示例是分层资源网址(例如/things/ID/relatedthings)与固定网址(例如/things/ID/relatedthings?thing=ID


1

REST(表示状态传输)是用于创建Web服务的体系结构。

RESTful是使用REST体系结构编写服务的方式。RESTful服务公开资源以标识与客户端交互的目标。


0

REST是用于创建Web服务的体系结构模式。RESTful服务是实现该模式的服务。

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.