Richardson成熟度模型 – RESTful 层级

1,724

一、 什么是RESTful

REST (representational State Transfer) ,翻译过来就是"表现层状态转化。” 是2000年Roy Thomas Fielding在他的博士论文中提出的, Roy博士从架构风格角度阐述了网络应用程序中最佳架构风格REST。

如果一个架构符合REST原则,就称它为RESTful架构。HTTP就是RESTful架构风格的典型应用。REST相对于RPC来说,可以理解成面向资源的。客户端不需要知道服务端的具体方法,而是通过URI表示资源。REST强调尽可能多的用HTTP协议本身的语义来传达信息,所以更注重接口规范。

二、 RESTful的层级

用Richardson Maturity Model来描述 RESTful API的成熟度级别。

1. Level 0: POX沼泽

这个级别的API并不是REST API,只是基于SOAP或者RPC的web service。HTTP仅作为传输层协议,参数放在body中,以POST方式提交到某个URI上的公开服务端点,可以以XML方式传递内容(POX),也可以是JSON,YAML,键值对或任何自定义格式。

2. Level 1:基于资源的URI

REST API的起始级别,也是迈向REST的第一步。将服务抽象成资源,而不再是将所有请求发送到单一公开服务端点。将请求的资源放在URI中,而不是作为参数放在header中。与Level 0相比,无需知道具体服务,只要知道服务地址,按照资源的路径就可以访问服务,例如http://127.0.0.1:3000/books/1

3. Level 2:HTTP谓词

此级别下的RESTful应用能比较充分地利用HTTP作用应用层协议的能力,也是目前应用最为广泛的层级。Level 0 和Level 1都是用了POST方法来交互,Level 2定义了HTTP增删改查的方法。

  • GET - 获取服务器资源,相对安全的操作,可以按任意顺序多次调用
  • POST - 在服务器上创建新资源
  • PUT - 更改服务器资源
  • DELETE - 删除服务器资源

HTTP谓词和资源结合起来就可以准确的表示“对XX(资源)做XX(操作)”,服务端通过HTTP状态码告诉客户端请求执行的结果,减少了服务器和客户端的耦合。

4. Level 3:超媒体控制

RNN模型的最高级别,利用了HATEOAS(超文本应用程序状态引擎)。

使用HATEOAS, 服务器向提供超媒体动态信息,即返回具有自描述性的数据结构。客户端可以知道下一步可操作资源的详细信息及可以对它进行的操作,这样的话,可以“按需”加载资源,就不再需要API文档了。

例如,客户端请求新浪微博的某个用户信息,REST服务可以返回 用户详情、获取他关注的人的链接、获取他最近微博的链接、获取他最近评论微博对的链接,等等。

这就带来另一个好处,服务端可以在响应中添加新的链接来添加新功能,也可以在不影响客户端的情况下修改URI方案。

三、 总结

RNN模型不属于REST自身级别的定义,而是提供了一种step by step地理解RESTful架构的方法,并且帮助我们根据业务场景更好地设计API。

参考:

Know how RESTful your API is: An Overview of the Richardson Maturity Model

Richardson Maturity Model-迈向REST的顶点

Restful levels层级 和HATEOAS原则