RESTful Levels HATEOAS
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相关推荐
- 架构师之路 — API 经济 — RESTful API
目录 文章目录 目录 REST REST 的优势 REST 的不足 RESTful API HATEOAS REST 早古时期,软件和网络是两个不同的领域,前者围绕着单机环境展开,而后者则研究系统之间 ...
- 深入浅出:5G和HTTP
本文将会讲到5G和HTTP.曾经在深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 3 提到为什么有些RPC框架不选用HTTP,而5G会采用HTTP. 您可以从本文里获取到一 ...
- rest spring_Spring的REST服务发现性,第5部分
rest spring 这是关于使用Spring 3.1和Spring Security 3.1和基于Java的配置来建立安全的RESTful Web Service的系列文章的第五篇. 上一篇文章介 ...
- Spring的REST服务发现性,第5部分
这是有关使用Spring 3.1和Spring Security 3.1和基于Java的配置来建立安全的RESTful Web Service的系列文章的第五篇. 上一篇文章介绍了RESTful服务H ...
- 【REST系列】详解REST架构风格 —— 带你阅读Web发展史上的一个重要技术文献
文章目录 REST详解 词组解释 论文摘要 REST架构约束 一.Client–server:客户端-服务器 二.Stateless:无状态 三.Cacheability:缓存 四.⭐Uniform ...
- RESTful服务的第三部分:HATEOAS和Richardson成熟度模型
by Sanchit Gera 通过Sanchit Gera RESTful服务的第三部分:HATEOAS和Richardson成熟度模型 (RESTful Services Part III : H ...
- HATEOAS的RESTful服务。 记录超媒体API
1.简介 希望本教程的前一部分不仅揭示了超媒体和HATEOAS的深远影响,而且使我们确信这些都是RESTful Web服务和API的基本构建块. 在这一部分中,我们将继续侧重于文档方面,以解决如何预先 ...
- HATEOAS的RESTful服务。 超媒体:REST的秘密要素
在这篇文章中,我们将介绍有关HATEOAS的RESTful服务的综合文章. 超媒体是REST的秘密成分. 1.简介 在本教程的前一部分中,我们花了一些时间来刷新有关REST体系结构样式的基本原理的知识 ...
- 使用 dynamic 类型让 ASP.NET Core 实现 HATEOAS 结构的 RESTful API
上一篇写的是使用静态基类方法的实现步骤: 使用dynamic (ExpandoObject)的好处就是可以动态组建返回类型, 之前使用的是ViewModel, 如果想返回结果的话, 肯定需要把View ...
最新文章
- 也许,这样理解 HTTPS 更容易!
- 初等数论--同余--WILSON定理
- RRID和CAS是什么?
- org.springframework.uti包下的StringUtils的使用和org.apache.commons.lang包下StringUtils的使用
- 【Makefile由浅入深完全学习记录5】预定义变量的使用
- C语言的关键字和详细介绍
- 整型数据类型java_Java 六种基本整型数据类型变量的取值范围
- webstorm的debug模式
- Struts 2 的学习笔记(二) struts的配置流程和strut是2的工作原理
- LeetCode()Minimum Window Substring 超时,但觉得很清晰。
- Java Swing的进化
- KeilC51版与KeilMDK版合并
- 163邮箱格式 ,个人邮箱的正确格式
- C语言lo如何优化运行界面,高质量程序优化总结整理【经典】
- Elastic 7.13.0 版重磅发布:在 Elastic 上搜索和存储更多数据
- ide中项目文件夹右下角蓝色小方块
- Crowd 和 JIRA、Confluence、Fisheye and Crucible共享账户集成登入
- Seaborn(三)调色板palette
- 卡尔曼滤波器(2) -- α−β−γ滤波器(例1)
- MessageFilter [target=odom ]: Dropped 95.28% of messages so far.Please turn the [ros.gmapping.messag