REST系统和基于REST的系统之间的区别是什么?

从我读到的一些东西来看,所谓的REST服务实际上就是RESTful服务。那么两者之间的区别是什么呢?


当前回答

基于REST的服务称为“REST式服务”。

来源:多布斯博士档案

其他回答

具象状态传输(Representational State Transfer, REST)是一种用于分布式超媒体系统(如万维网)的软件体系结构风格。2000年,罗伊·菲尔丁(Roy Fielding1[2])在他的博士论文中引入并定义了“具象状态转移”(Representational State Transfer)一词。Fielding是超文本传输协议(HTTP)规范1.0和1.1版本的主要作者之一。 遵循REST约束被称为“RESTful”。资料来源:维基百科

从面向对象编程思想的角度来看,REST类似于要实现的接口,RESTfull服务类似于REST“接口”的实际实现。

REST只是定义了一组规则,说明它是REST api, RESTfull服务遵循这些规则。

上面的答案已经列出了大部分规则,但我知道一个重要的要求,在我的经验中经常被忽视,因为一个真正的REST api必须是超链接驱动的,除了所有HTTP PUT, POST, GET, DELETE爵士。

在Richardson成熟度模型中定义了4个级别的API。这些被定义为:

level 0: any system that has a single endpoint for all its apis(SOAP or RPC fall in this category). Level 0 apis can also resemble "commands". level 1: a ResourceUri described system. This is a system that defines multiple entity-based URIs (instead of having a single endpoint like a level 0 systems would). These URIs can use different http actions (POST, GET, PUT, etc) to implement different actions against that resource. level 2: aka level 1 w/ a compliant use of Standard HTTP methods/verbs and multi status code responses level 3: aka level 2 plus HATEOAS (hypermedia included in the response which describes additional calls you can make)

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

所以本质上所有的RESTful api都是REST api,但并不是所有的REST api都是RESTful的

理查德森成熟度模型的定义

具象状态传输(REST)是软件体系结构的一种风格。正如Roy Fielding在一篇论文中描述的那样,REST是一种“架构风格”,基本上利用了现有的Web技术和协议。

RESTful通常用于指实现这种体系结构的web服务。

基于REST的服务/架构vs.基于REST的服务/架构

为了区分或比较这两者,您应该了解REST是什么。

REST(具象状态传输)基本上是一种具有以下原则的开发架构风格:

它应该是无状态的 它应该只使用URI访问来自服务器的所有资源 它没有内置加密 它没有会话 它使用一个且只有一个协议——HTTP 为了执行CRUD操作,它应该使用HTTP动词,如get、post、put和delete 它应该只以JSON或XML、atom、OData等形式返回结果(轻量级数据)。

基于REST的服务遵循上面的一些原则,但不是全部

RESTFUL服务意味着它遵循上述所有原则。

它类似于:

面向对象语言支持所有面向对象的概念,例如:c++, c#

基于对象的语言支持一些面向对象的特性,例如:JavaScript, VB


例子:

asp.net MVC 4是基于rest的,而Microsoft WEB API是基于rest的。

MVC只支持上述REST原则中的一部分,而WEB API则支持上述所有REST原则。

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

我们可以使用URI访问资源 它支持HTTP谓词从服务器访问资源 它可以以JSON、XML的形式返回结果,也就是HTTPResponse。

然而,同时在MVC中

我们可以使用会话 我们可以让它有状态 我们可以从控制器动作方法返回视频或图像,这基本上违反了REST原则

这就是为什么MVC是基于rest的,而WEB API支持上述所有原则并且是RESTFul的。