1、什么是RESTful?

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

Roy Thomas Fielding在论文中将REST定位为“分布式超媒体应用(Distributed Hypermedia System)”的架构风格,它在文中提到一个名为“HATEOAS(Hypermedia as the engine of application state)”的概念。

如果一个架构符合REST原则,就称它为RESTful架构

REST level

  1. 0级

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

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

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

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

理解RESTful架构

  • 资源

    REST的名称"表现层状态转化"中,省略了主语。"表现层"其实指的是"资源"(Resources)的"表现层"。

    所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息
  • 表现层

    "资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。
  • 状态转换

    访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。

    互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。

    客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

综上所述

RESTful架构可以总结成以下3点

1、每个URL代表一种资源

2、客户端和服务器之间,传递这种资源的某种表现层;

3、客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"

2、HATEOAS

超媒体作为应用程序状态引擎(HATEOAS)是REST应用程序体系结构的一个组件,它将其与其他网络应用程序体系结构区分开来。

使用HATEOAS,客户端与网络应用程序交互,其应用程序服务器通过超媒体动态提供信息。除了对超媒体的一般理解之外,REST客户端几乎不需要知道如何与应用程序或服务器交互。

HATEOAS约束将客户端和服务器分离的方式使服务器功能能够独立发展。

示列

REST客户端通过简单的固定URL进入REST应用程序。客户端可能采取的所有未来操作都在服务器返回的资源表示中发现。用于这些表示的媒体类型以及它们可能包含的链接关系是标准化的。客户端通过从表示中的链接中进行选择或通过以其媒体类型提供的其他方式操纵表示来转换应用程序状态。通过这种方式,RESTful交互由超媒体驱动,而不是带外信息。

列如以GET请求获取账户资源,以XML表现形式请求详细信息:

GET /accounts/12345 HTTP/1.1
Host: bank.example.com
Accept: application/xml
...

响应是:

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: ... <?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">100.00</balance>
<link rel="deposit" href="https://bank.example.com/accounts/12345/deposit" />
<link rel="withdraw" href="https://bank.example.com/accounts/12345/withdraw" />
<link rel="transfer" href="https://bank.example.com/accounts/12345/transfer" />
<link rel="close" href="https://bank.example.com/accounts/12345/status" />
</account>

响应包含以下可能的后续链接:进行存款,取款或转账,或关闭账户。

稍后检索帐户信息时,帐户会透支:

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: ... <?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">-25.00</balance>
<link rel="deposit" href="https://bank.example.com/accounts/12345/deposit" />
</account>

现在只有一个链接可用:存入更多钱。在当前状态下,其他链接不可用。因此,术语引擎应用状态。可能的操作因资源状态的不同而有所不同。

客户端不需要了解服务器提供的每种媒体类型和通信机制。通过服务器提供给客户端的“ 按需代码 ”,可以在运行时获取理解新媒体类型的能力

参考链接:

https://en.wikipedia.org/wiki/HATEOAS

http://www.ruanyifeng.com/blog/2011/09/restful.html

https://elf8848.iteye.com/blog/379125

RESTFUL Level&HATEOAS的更多相关文章

  1. Restful levels&HATEOAS

    RESTful: Rest是一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等 ...

  2. Restful levels&HATEOAS详解

    RESTful: Rest是一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等 ...

  3. RESTful Levels & HATEOAS

    什么是RESTful REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的.翻译过来就是"表现层状态转化.” REST是一种软件架构风格.设计风格,而不是 ...

  4. Restful levels &HATEOAS基本介绍~

    本文所涉及的内容摘自:http://www.manongjc.com/article/93934.html 什么是RESTful REST这个词,是Roy Thomas Fielding在他2000年 ...

  5. RESTful Level

    REST(表述性状态转移)是最近几年讨论的最为热烈的话题之一,其起源于Roy.T.Fielding博士的论文<软件架构风格和基于网路的软件架构设计>.Roy博士在他的论文里从架构风格角度阐 ...

  6. 深入浅出:5G和HTTP

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

  7. RESTful levels 和 HATEOAS

    RESTful REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序.它首次出现在 2000 年 Roy ...

  8. Restful levels and Hateoas

    RESTful: Rest是一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等 ...

  9. RESTful levels、HATEOAS

    概述: REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序.它首次出现在 2000 年 Roy Fiel ...

随机推荐

  1. 寒假day04

    今天编写了毕设系统中的专家画像模块,实现了人员标签的建立与划分,同时刷了牛客网的面试相关题目. 1.如果系统的umask设置为244,创建一个新文件后,它的权限:(C) --w-r--r-- -r-x ...

  2. nodejs服务后台持续运行三种方法

    一.利用 forever forever是一个nodejs守护进程,完全由命令行操控.forever会监控nodejs服务,并在服务挂掉后进行重启. 1.安装 forever npm install ...

  3. CodeForces 1005D Polycarp and Div 3(思维、贪心、dp)

    http://codeforces.com/problemset/problem/1005/D  题意: 给一个仅包含数字的字符串,将字符串分割成多个片段(无前导0),求这些片段里最多有多少是3的倍数 ...

  4. Mybatis Generator逆向工程的使用

    一.在 idea 中使用 mybatis generator 逆向工程 1.在IDEA上创建maven工程. 2.在pom.xml中配置MyBatis逆向工程插件 <!--MyBatis自动生成 ...

  5. iOS 类似外卖 两个tableView联动

    在伯乐在线上看到一个挺好玩的文章,自己也参考文章实现了一下. 效果实现如图所示: 具体实现的内容可以参考原文,参考文章:<iOS 类似美团外卖 app 两个 tableView 联动效果实现&g ...

  6. 分层结构与MVC模式

    一.分层结构1.所谓分层结构.把不同的功能代码封装成类,把相同功能的类封装在一个个的包中,也叫层.功能归类如下:实体类:封装数据,是数据的载体,在层与层之间进行传递,数据也就传递了.比如说要传递学生信 ...

  7. 关于guava实现线程池

    private ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newCac ...

  8. PAT甲级——1011 World Cup Betting

    PATA1011 World Cup Betting With the 2010 FIFA World Cup running, football fans the world over were b ...

  9. Linear Equations

    4.1 Linear Equations with One Independent Variable

  10. 解决一个通过 WebReference 调用 WCF 时自定义 DataContract 类参数提交的问题

    先看一下VS2013自动创建默认的IService1.vb,注意自定义的数据契约 CompositeType ' 注意: 使用上下文菜单上的“重命名”命令可以同时更改代码和配置文件中的接口名“ISer ...