1. 什么是RESTful

REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。翻译过来就是"表现层状态转化。”

REST是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。而满足这些约束条件和原则的应用程序或设计就是 RESTful。

2.REST的四个级别:

0级:传统的RPC,基于SOAP的WS,调用的服务名,参数放在HTTP协议的body里面,同时必须以POST方式提交,问题在于你必须清楚的知道所有服务,子服务,及其参数的信息,并且需要知道各种服务的不同点。

1级:利用resource概念,把所有服务都抽取成resource概念,从body中提取到header里,这样做的好处就是如果你知道一个服务地址,你可能无需知道具体服务是什么,依照资源的惯例就访问到服务,比如/books/1。

2级:利用HTTP动词,HTTP定义了4种动词,GET获取服务器资源,POST在服务器上创建新资源,PUT更改服务器上资源,DELETE删除服务器上资源,任何操作都可以看成增删改查,所以利用标准的http verb加上resource(/book/1)就能准确地操作资源,当你不知道服务具体是什么的时候也可以轻易按照惯例访问到服务,然而服务供应商更改服务也需要遵循惯例,不会像RPC那样轻易更改服务接口。

3级:最高级别,超媒体既应用状态引擎。这个意思是说,对于任何服务都存在很多子服务,你只需要知道第一个服务的入口,便可以依据服务返回结构的自描述性得到下一个服务的入口,这样在服务供应商修改服务的时候,不会影响到客户端的调用。

hateoas简介
HATEOAS是Hypertext As The Engine Of Application State的缩写。在Richardson Maturity Model中, 它是REST的最高级形态。

在介绍 HATEOAS 之前,先介绍一下 Richardson 提出的 REST 成熟度模型。该模型把 REST 服务按照成熟度划分成 4 个层次:

第一个层次(Level 0)的 Web 服务只是使用 HTTP 作为传输方式,实际上只是远程方法调用(RPC)的一种具体形式。SOAP 和 XML-RPC 都属于此类。
第二个层次(Level 1)的 Web 服务引入了资源的概念。每个资源有对应的标识符和表达。
第三个层次(Level 2)的 Web 服务使用不同的 HTTP 方法来进行不同的操作,并且使用 HTTP 状态码来表示不同的结果。如 HTTP GET 方法来获取资源,HTTP DELETE 方法来删除资源。
第四个层次(Level 3)的 Web 服务使用 HATEOAS。在资源的表达中包含了链接信息。客户端可以根据链接来发现可以执行的动作。
该模型将REST划作了由低到高四个等级,等级越高,RESTful就越成熟。关于restful层次的网上也有很多例子,这里就不赘述了。
需要注意的是,熟透了东西不一定好,甚至可能烂了,所以,项目中对于RESTful层级的选择要灵活把控,现在最常用的就是level2这个层次。

关于level2中有个比较常出错的地方,URI中不应该包含动词。 因为"资源"表示一种实体,所以应该是名词,URI不应该有动词,动词应该放在HTTP协议中。举例来说,某个URI是/posts/show/1,其中show是动词,这个URI就设计错了,正确的写法应该是/posts/1,然后用GET方法表示show。如果某些动作是HTTP动词表示不了的,你就应该把动作做成一种资源。比如网上汇款,从账户1向账户2汇款500元,错误的URI是:POST /accounts/1/transfer/500/to/2,正确的写法是把动词transfer改成名词transaction,然后以参数的方式注明其它参数
POST /accounts/transaction?from=1&to=2&amount=500.00
RESTful API最好做到Hypermedia(HATEOAS),即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。

hateoas简介
HATEOAS是Hypertext As The Engine Of Application State的缩写。在Richardson Maturity Model中, 它是REST的最高级形态。

在介绍 HATEOAS 之前,先介绍一下 Richardson 提出的 REST 成熟度模型。该模型把 REST 服务按照成熟度划分成 4 个层次:

第一个层次(Level 0)的 Web 服务只是使用 HTTP 作为传输方式,实际上只是远程方法调用(RPC)的一种具体形式。SOAP 和 XML-RPC 都属于此类。
第二个层次(Level 1)的 Web 服务引入了资源的概念。每个资源有对应的标识符和表达。
第三个层次(Level 2)的 Web 服务使用不同的 HTTP 方法来进行不同的操作,并且使用 HTTP 状态码来表示不同的结果。如 HTTP GET 方法来获取资源,HTTP DELETE 方法来删除资源。
第四个层次(Level 3)的 Web 服务使用 HATEOAS。在资源的表达中包含了链接信息。客户端可以根据链接来发现可以执行的动作。
该模型将REST划作了由低到高四个等级,等级越高,RESTful就越成熟。关于restful层次的网上也有很多例子,这里就不赘述了。
需要注意的是,熟透了东西不一定好,甚至可能烂了,所以,项目中对于RESTful层级的选择要灵活把控,现在最常用的就是level2这个层次。

关于level2中有个比较常出错的地方,URI中不应该包含动词。 因为"资源"表示一种实体,所以应该是名词,URI不应该有动词,动词应该放在HTTP协议中。举例来说,某个URI是/posts/show/1,其中show是动词,这个URI就设计错了,正确的写法应该是/posts/1,然后用GET方法表示show。如果某些动作是HTTP动词表示不了的,你就应该把动作做成一种资源。比如网上汇款,从账户1向账户2汇款500元,错误的URI是:POST /accounts/1/transfer/500/to/2,正确的写法是把动词transfer改成名词transaction,然后以参数的方式注明其它参数
POST /accounts/transaction?from=1&to=2&amount=500.00
RESTful API最好做到Hypermedia(HATEOAS),即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。

HATEOAS又是什么鬼?
我们知道REST是使用标准的HTTP方法来操作资源的,但仅仅因此就理解成带CURD的Web数据库架构就太过于简单了。 这种说法忽略了一个核心概念: “超媒体即应用状态引擎(hypermedia as the engine of application state)”。 超媒体是什么? 当你浏览Web网页时,从一个连接跳到一个页面,再从另一个连接跳到另外一个页面,就是利用了超媒体的概念: 把一个个把资源链接起来。
要达到这个目的,就要求在表述格式里边加入链接来引导客户端。在《RESTFul Web Services》一书中,作者把这种具有链接的特性成为连通性。

HATEOAS为RESTful Web服务带来了相同的概念。

转载于:https://www.cnblogs.com/SiriYang/p/10666887.html

RESTful Levels HATEOAS相关推荐

  1. 架构师之路 — API 经济 — RESTful API

    目录 文章目录 目录 REST REST 的优势 REST 的不足 RESTful API HATEOAS REST 早古时期,软件和网络是两个不同的领域,前者围绕着单机环境展开,而后者则研究系统之间 ...

  2. 深入浅出:5G和HTTP

    本文将会讲到5G和HTTP.曾经在深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 3 提到为什么有些RPC框架不选用HTTP,而5G会采用HTTP. 您可以从本文里获取到一 ...

  3. rest spring_Spring的REST服务发现性,第5部分

    rest spring 这是关于使用Spring 3.1和Spring Security 3.1和基于Java的配置来建立安全的RESTful Web Service的系列文章的第五篇. 上一篇文章介 ...

  4. Spring的REST服务发现性,第5部分

    这是有关使用Spring 3.1和Spring Security 3.1和基于Java的配置来建立安全的RESTful Web Service的系列文章的第五篇. 上一篇文章介绍了RESTful服务H ...

  5. 【REST系列】详解REST架构风格 —— 带你阅读Web发展史上的一个重要技术文献

    文章目录 REST详解 词组解释 论文摘要 REST架构约束 一.Client–server:客户端-服务器 二.Stateless:无状态 三.Cacheability:缓存 四.⭐Uniform ...

  6. RESTful服务的第三部分:HATEOAS和Richardson成熟度模型

    by Sanchit Gera 通过Sanchit Gera RESTful服务的第三部分:HATEOAS和Richardson成熟度模型 (RESTful Services Part III : H ...

  7. HATEOAS的RESTful服务。 记录超媒体API

    1.简介 希望本教程的前一部分不仅揭示了超媒体和HATEOAS的深远影响,而且使我们确信这些都是RESTful Web服务和API的基本构建块. 在这一部分中,我们将继续侧重于文档方面,以解决如何预先 ...

  8. HATEOAS的RESTful服务。 超媒体:REST的秘密要素

    在这篇文章中,我们将介绍有关HATEOAS的RESTful服务的综合文章. 超媒体是REST的秘密成分. 1.简介 在本教程的前一部分中,我们花了一些时间来刷新有关REST体系结构样式的基本原理的知识 ...

  9. 使用 dynamic 类型让 ASP.NET Core 实现 HATEOAS 结构的 RESTful API

    上一篇写的是使用静态基类方法的实现步骤: 使用dynamic (ExpandoObject)的好处就是可以动态组建返回类型, 之前使用的是ViewModel, 如果想返回结果的话, 肯定需要把View ...

最新文章

  1. 也许,这样理解 HTTPS 更容易!
  2. 初等数论--同余--WILSON定理
  3. RRID和CAS是什么?
  4. org.springframework.uti包下的StringUtils的使用和org.apache.commons.lang包下StringUtils的使用
  5. 【Makefile由浅入深完全学习记录5】预定义变量的使用
  6. C语言的关键字和详细介绍
  7. 整型数据类型java_Java 六种基本整型数据类型变量的取值范围
  8. webstorm的debug模式
  9. Struts 2 的学习笔记(二) struts的配置流程和strut是2的工作原理
  10. LeetCode()Minimum Window Substring 超时,但觉得很清晰。
  11. Java Swing的进化
  12. KeilC51版与KeilMDK版合并
  13. 163邮箱格式 ,个人邮箱的正确格式
  14. C语言lo如何优化运行界面,高质量程序优化总结整理【经典】
  15. Elastic 7.13.0 版重磅发布:在 Elastic 上搜索和存储更多数据
  16. ide中项目文件夹右下角蓝色小方块
  17. Crowd 和 JIRA、Confluence、Fisheye and Crucible共享账户集成登入
  18. Seaborn(三)调色板palette
  19. 卡尔曼滤波器(2) -- α−β−γ滤波器(例1)
  20. MessageFilter [target=odom ]: Dropped 95.28% of messages so far.Please turn the [ros.gmapping.messag

热门文章

  1. 最详细的NLP开源数据集分享--包含342个公开数据集
  2. 【西安交大】2020年最新深度学习目标检测方法综述
  3. 谷歌开源EfficientDet:实现新SOTA,又快又准的目标检测器
  4. MIT提出Liquid机器学习系统,可像液体一样适应动态变化
  5. 人工智能治理需用好“人工”
  6. 年纪最小90后,他们在北大教AI
  7. 看!那全球最伟大的人工智能女性科学家们!
  8. 微软研究院开源DialoGPT:你有什么梦想?「让世界充满机器人」
  9. 人工智能技术改变传统驾驶行为
  10. Python 基础(6)(常用数据结构)