RESTful

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 服务与 RPC 样式的 Web 服务

在 REST 样式的 Web 服务中,每个资源都有一个地址。资源本身都是方法调用的目标,方法列表对所有资源都是一样的。这些方法都是标准方法,包括 HTTP GET、POST、PUT、DELETE,还可能包括 HEAD 和 OPTIONS。

Restful风格的常用四种请求方式

1、GET[select]  请求会向数据库发索取数据的请求,从而来获取信息,其只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容。无论进行多少次操作,结果都是一样的。

2、PUT[update]  请求是向服务器端发送数据的,从而改变信息,其用来修改数据的内容,但是不会增加数据的种类等,无论进行多少次PUT操作,其结果并没有不同。

3、POST[insert]请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源.几乎目前所有的提交操作都是用POST请求的。

4、DELETE[delete]请求是用来删除某一个资源的。

POST主要作用在一个集合资源之上的(url),而PUT主要作用在一个具体资源之上的(url/xxx).如URL可以在客户端确定,那么可使用PUT,否则用POST。

一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。

HATEOAS

HATEOAS 约束
HATEOAS(Hypermedia as the engine of application state)是 REST 架构风格中最复杂的约束,也是构建成熟 REST 服务的核心。它的重要性在于打破了客户端和服务器之间严格的契约,使得客户端可以更加智能和自适应,而 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 成熟度模型中可以看到,使用 HATEOAS 的 REST 服务是成熟度最高的,也是推荐的做法。对于不使用 HATEOAS 的 REST 服务,客户端和服务器的实现之间是紧密耦合的。客户端需要根据服务器提供的相关文档来了解所暴露的资源和对应的操作。当服务器发生了变化时,如修改了资源的 URI,客户端也需要进行相应的修改。而使用 HATEOAS 的 REST 服务中,客户端可以通过服务器提供的资源的表达来智能地发现可以执行的操作。当服务器发生了变化时,客户端并不需要做出修改,因为资源的 URI 和其他信息都是动态发现的。

最新文章

  1. my links
  2. 在IIS7中ASP.NET MVC3网站中建立gcc编译服务时要注意的问题
  3. 【BZOJ-4569】萌萌哒 ST表 + 并查集
  4. 跟着鸟哥学Linux系列笔记0-如何解决问题
  5. android手机两种方式获取IP地址
  6. 【weka应用技术与实践】过滤器
  7. C/C++中的结构体
  8. uchome 2.0 存在持久XSS漏洞
  9. Kernel panic - not syncing: Attempted to kill init
  10. 用css2属性clip实现网页进度条
  11. 优化单页面开发环境:webpack与react的运行时打包与热更新
  12. Hive metastore表结构设计分析
  13. python DNS域名轮询业务监控
  14. Lambda表达式概念与基本语法
  15. CentOS安装git及使用Gitolite来管理版本库
  16. mac上搭建appium+IOS自动化测试环境(二)
  17. 统计学习方法三:K近邻
  18. Easyui datagrid自定义排序
  19. 重新认识KCP
  20. JS解析json数据(如何将json字符串转化为数组)

热门文章

  1. MySQL建表规范
  2. 【转】mac环境下Android 反编译
  3. Vue项目中,要保证某个部分的高度,应该怎么设置
  4. 02-Django基础知识
  5. sprd测试系统跑vts
  6. cf55D 数位dp记忆化搜索+状态离散
  7. sql语句的删除
  8. python开发环境_windows系统安装_错误记录
  9. LCA最近公共祖先
  10. asp+SqlServer2008开发【第四集:windows server 2008 r2的操作记录】