什么是restful风格的api

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是restful风格的api相关的知识,希望对你有一定的参考价值。

参考技术A 直观认识
对url进行规范,写RESTful格式的url
非REST的url:http://…../queryItems.action?id=001&type=T01
REST风格的url:http://…./id/001/type/T01
特点:url简洁,将参数通过url传到服务端
http的方法规范
不管是删除、添加、更新。。使用url是一致的,如果进行删除,需要设置http的方法为DELETE,同理添加POST。。。
后台controller的方法里需要判断http方法,如果是delete执行删除,如果是post执行添加(使用SpringMVC等类似框架可以省去我们自己判断的过程)
对http的contentType规范
请求时指定contentType,要json数据,设置成json格式的type。。
个人理解
源于网站即软件的思想
越来越多的人开始意识到,网站即软件,而且是一种新型的软件。
这种”互联网软件”采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。
网站开发,完全可以采用软件开发的模式。但是传统上,软件和网络是两个不同的领域,很少有交集;软件开发主要针对单机环境,网络则主要研究系统之间的通信。互联网的兴起,使得这两个领域开始融合。(备注:因为这是研究者在2000年发表的论文,所以这里说的软件开发的概念都比较古老了,我们现在的软件应该都属于他说的互联网软件)
问题来了——如何更好的通信
现在我们必须考虑,如何开发在互联网环境中使用的软件。
如何得到一个功能强、性能好、适宜通信的架构
解决方案——统一的风格
网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备……)。
因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API架构的流行——RESTful是其中之一。
定义
REST:Representational State Transfer
REST: 指的是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。
RESTful:满足这些约束条件和原则的应用程序或设计就是 RESTful。
应用范围:它主要用于客户端和服务器交互类的软件。
优点:基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制(?还没有什么体会,暂且写到这里)。
综述:
(1)每一个URI代表一种资源;(可以把资源理解为网络中的信息)
(2)客户端和服务器之间,传递这种资源的某种表现层;(表现形式,如资源的格式JSON、XML)
(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现”表现层状态转化”。(HTTP协议,是一个无状态协议。通过GET,POST,DELETE等使服务端的资源发生改变,如:修改,删除)
  每个资源都使用 URI (Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。

到底什么是RESTFUL风格架构?

RESTFUL风格架构

WYH?

随着前后端分离的流行,以及移动互联网的爆发,导致后端API接口要向不同的Web端提供服务,那么对于 API 的规范就需要有一定的要求了。这个时候 RESTFul 的优势就体现出来了,它更简洁,更有层次,更易于实现缓存。

此概念"表现层状态转换(Representational State Transfer&REST)"是Roy Thomas Fielding 博士于 2000 年在他的博士论文中提出来的一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。表现层状态转换是根基于超文本传输协议 ( HTTP ) 之上而确定的一组约束和属性,是一种设计提供万维网络服务的软件构建风格。

——维基百科

核心思想

其实REST就是对资源表现形式的转换的一种规范,或者说是资源以某种形式进行状态转换。直白的讲就是按照一定的规范去操作某种特定格式的数据

规范

  • 用URI定位资源
  • URI由名称组成
  • 使用HTTP方法对应数据的操作

HTTP请求方法主要有七种:分别是:

GET, POST 和 HEAD方法(HTTP1.0)

OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法(HTTP1.1)

其中GET、POST 、DELETE、PUT四种请求方法在RESTFUL风格中最为常见:

HTTP方法 安全性 幂等性 接口说明
GET 安全 幂等 获取资源(Read)
POST 不安全 非幂等 创建资源(Create)
PUT 不安全 幂等 更新资源(Update)
DELETE 不安全 幂等 删除资源(Delete)

关于URL&URI

你可能会注意到,上面提到的REST规范中,用到的是URI而不是URL。那它们之间有什么区别呢?其实,要向弄清楚,还需要引入另一个概念——URN。

三者解释:

  • URI:Universal Resource Identifier 统一资源标志符
  • URL:Universal Resource Locator 统一资源定位符
  • URN:Universal Resource Name 统一资源名称

一张图说明三者的关系:

技术图片

可以看出,URI包含URL与URN,或者说是URL与URN的总称。

所以:只要一个URI符合URN,我们就可以认为这个URI不是URL了,其实,关于URL与URN,大白话就是,URL可以在任意的互联网中定位一个资源,而URN则办不到。

url. https://www.google.com
urn. mailto:leiming@google.com

关于幂等性&安全性

你也许也会注意到上文提到了幂等性安全性的概念,在这里不做过多解释,就按照大白话简单说明下:

  • 幂等性:当一个请求与多个同样的请求会不会返回相同的结果
  • 安全性:一个请求发出之后会不会对服务器资源产生改变

以上是关于什么是restful风格的api的主要内容,如果未能解决你的问题,请参考以下文章

REST API包含两个字段

到底什么是RESTFUL风格架构?

如何使用 ANGULAR 5 的 ARC 扩展发送 POST 请求以测试 api Rest?

02.Restful风格

为 API REST 创建 Json

ID 为 URL 时的 API REST