RESTful levels、HATEOAS

概述:  

  REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,Roy Fielding是 HTTP 规范的主要编写者之一。在目前主流的三种Web服务交互方案中,REST相比于SOAP(Simple Object Access protocol,简单对象访问协议)以及XML-RPC更加简单明了,无论是对URL的处理还是对Payload的编码,REST都倾向于用更加简单轻量的方法设计和实现。值得注意的是REST并没有一个明确的标准,而更像是一种设计的风格。

原则条件:

  REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。

  RESTful的实现:

RESTful Web 服务的 Java 框架;

RESTful Web 服务与 RPC 样式的 Web 服务;构建 RESTful Web 服务的多层架构。

  

RESTful 的成熟度模型:

Level 0

利用 HTTP 协议做数据交换,所有的参数描述通过 url 或者 POST body 形式通知服务器,返回相应的数据,此级别通常都是基于 。实质上就是基于 HTTP 的 RPC(远程过程调用),具体交付的细节完全由相关规范或团队内部约定解决。

Level 1

将 API 按照 RESTful 中资源的方式进行划分,初步有了自我描述(self description)的特性了,客户端可以对相关的资源进行更加细致的操作。

Level 2

这个级别有更加进一步的利用了 HTTP 的特性,增加了对 HTTP verb (比如 GET 表示查询、POST 表示创建、PUT 表示修改、DELETE 表示 等等)的运用,并且运用原有的 HTTP response status 来表征业务上请求的成功与失败,一般项目常见的 RESTful 运用基本都接近这个级别。

Level 3

这个基本也称作 HATEOAS (Hypertext As The Engine Of Application State),这个级别是 RESTful 最复杂的实现,这个级别最理想的情况是,不需要特别复杂 API 文档进行描述的,这里的 API 设计最大化的实现了 RESTful 的自我描述特性。这种方案虽然引入很大的复杂性,但是最大限度的将 API 设计变得配置化了,所有 API 设计将会基于更加抽象的工作流设计了。

-------------------------

转自:https://www.jianshu.com/p/f264db28bce1

什么是HATOEAS:

  HATEOAS是 Hypertext As The Engine Of Application State 的缩写。采用Hypermedia的API在响应(response)中除了返回资源(resource)本身外,还会额外返回一组Link。 这组Link描述了对于该资源,消费者(consumer)接下来可以做什么以及怎么做。

举例来说,假设向API发起一次get请求,获取指定订单的资源表述(representation):

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 05 Jun 2015 02:54:57 GMT

{
    "tracking_id": "123456",
    "status": "WAIT_PAYMENT",
    "items": [
        {
            "name": "potato",
            "quantity": 1
        }
    ],
    "_Links": {
        "self": {
            "href": "http://localhost:57900/orders/123456"
        },
        "cancel": {
            "href": "http://localhost:57900/orders/123456"
        },
        "payment": {
            "href": "http://localhost:57900/orders/123456/payments"
        }
    }
}
  • 理解Link中的“self”的消费者知道使用get方法访问其“href”的uri可以查看该订单的详细信息
  • 理解Link中的“cancel”的消费者知道使用delete方法访问其“href”的uri可以取消该订单
  • 理解Link中的“payment”的消费者知道使用post方法访问其“href”的uri可以为该订单付款

  HATEOAS提倡在响应返回Link来提示对该资源接下来的操作。这种方式解耦了服务端URI,也可以让客户端开发者更容易地探索API。最后,通过Link来判断业务状态,还能有效地消除单页应用中的业务规则重复实现。

-----------------------------

转自:https://www.colabug.com/3967837.html

原文地址:https://www.cnblogs.com/ydc198/p/10667181.html

时间: 2024-10-30 16:55:13

RESTful levels、HATEOAS的相关文章

DjangoRestFramework学习一之restful规范、APIview、解析器组件、Postman等

DjangoRestFramework学习一之restful规范.APIview.解析器组件.Postman等 本节目录 [TOC] 一 预备知识 预备知识:django的CBV和FBV CBV(class based view):多用,简单回顾一下 FBV(function based view): CBV模式的简单操作:来个登陆页面吧 login.html文件内容如下: <!DOCTYPE html> <html lang="en"> <head>

Restful levels&amp;HATEOAS

RESTful: Rest是一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制.而满足这些约束条件和原则的应用程序或设计就是 RESTful. 如图有四个层次: level 0:The swarmp of POX(Plain old XML) 该模型的出发点是使用HTTP作为远程交互的传输系统,但不使用Web的任何机制.基本上你在这里做的是使用HTTP作为你自己的远程交互

RESTful levels &amp; HATEOAS

什么是RESTful REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的.翻译过来就是"表现层状态转化.” Fielding在论文中将REST定位为“分布式超媒体应用(Distributed Hypermedia System)”的架构风格,它在文中提到一个名为“HATEOAS(Hypermedia as the engine of application state)”的概念. HATEOAS又是什么鬼? 我们知道REST是使用标准的HTTP方法来操作资源

18.DjangoRestFramework学习一之restful规范、APIview、解析器组件、Postman等

一 预备知识 预备知识:django的CBV和FBV CBV(class based view):多用,简单回顾一下 FBV(function based view): CBV模式的简单操作:来个登陆页面吧 login.html文件内容如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</tit

RESTful 、RESTful API 、REST 介绍

什么是REST? REST(Representational State Transfer):表现层转移(转移:通过HTTP动词实现),是一种软件架构风格.总结:URL定位资源,HTTP动词操作(GET,POST,PUT,DELETE)描述操作. 什么是RESTfun? 基于Rest构建的API就是Restful风格. 为什么使用RESTful? JSP内嵌java代码影响了我们的开发效率.因为我们需要将html转换成html页面,并写一些脚本,这影响了开发效率,也不能让开发人员专注于业务功能的

Django框架 --CBV源码分析、restful规范、restframework框架

一.CBV源码分析 1.url层的使用CBV from app01 import views url(r'book/',views.Book.as_view()) 2.as_view方法 as_view是一个类方法,实际上是一个闭包函数(内层函数包含对外层作用域的使用) 请求来了以后,调用as_view方法,调用函数中的view方法,view方法是调用了dispatch方法 @classonlymethod def as_view(cls, **initkwargs): def view(req

lement-ui、接口、restful规范、drf

element-ui 安装 cnpm i element-ui -S 配置main.js import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); 使用:官方API https://element.eleme.cn/#/zh-CN/component/installation <!--案例--> <el-row> <el-butto

RESTful风格、异常处理、Spring框架

1.RESTful风格 什么是RESTful风格? REST是REpressentational State Transfer的缩写,中文翻译为表述性状态转移,REST是一种体系结构,而HTTP是一种包含了REST架构属性的协议,为了便于理解,我们把它的首字母拆分成不同的几个部分: 表述性(REpressentational):REST资源实际上可以用各种形式来进行表述,包括XML.JSON.甚至HTML--最适合资源使用者的任意形式: 状态(State):当时用REST的时候,我们更关注资源的

Introduction of RESTful level &amp; HATEOAS

REST level 0级传统的RPC,基于SOAP的WS,调用的服务名,参数放在HTTP协议的body里面,同时必须以POST方式提交,问题在于你必须清楚的知道所有服务,子服务,及其参数的信息,并且需要知道各种服务的不同点 1级利用resource概念,把所有服务都抽取成resource概念,从body中提取到header里,这样做的好处就是如果你知道一个服务地址,你可能无需知道具体服务是什么,依照资源的惯例就访问到服务,比如/books/1 2级利用HTTP动词,HTTP定义了4种动词,GE