接口测试学习笔记之02 REST & RESTfull API

接口测试学习笔记之02 REST & RESTfull API

REST, REpresentational State Transfer,直译为表现层状态转化,又称具象状态传输

REST 是Roy Thomas Fielding博士于2000年在他的博士论文中提出来的一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。表现层状态转换是根基于超文本传输协议(HTTP)之上而确定的一组约束和属性,是一种设计提供万维网络服务的软件构建风格。符合或兼容于这种架构风格(简称为RESTRESTful)的网络服务,允许客户端发出以统一资源标识符访问和操作网络资源的请求,而与预先定义好的无状态操作集一致化。因此表现层状态转换提供了在互联网络的计算系统之间,彼此资源可交互使用的协作性质(interoperability)。相对于其它种类的网络服务,例如 SOAP服务则是以本身所定义的操作集,来访问网络上的资源。

要理解什么是REST,我们需要理解下面几个概念:

REST – REpresentational State Transfer,之所以晦涩难懂,是因为前面的主语被省掉了,全称应是 Resource Representational State Transfer,即:资源在网络中以某种表现形式进行状态转移。

  • Resources, 资源
    什么是资源呢?资源,即数据,就是我们平常上网访问的一张图片、一个文档、一个视频等。这些资源我们通过URI来定位,也就是一个URI(Uniform Resource Identifier,统一资源标志符)表示一个资源。
  • Representation, 表现层
    资源是一个具体的实体信息,可以有多种的展现方式。而把实体展现出来就是表现层,例如一个txt文本信息,他可以输出成html、json、xml等格式,一个图片也可以jpg、png等方式展现,这个就是表现层的意思。URI确定一个资源,但是如何确定它的具体表现形式呢?应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对”表现层”的描述。
  • State Transfer, 状态转化
    访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,肯定涉及到数据和状态的变化。
    而HTTP协议是无状态的,那么这些状态肯定保存在服务器端,所以如果客户端想要通知服务器端改变数据和状态的变化,肯定要通过某种方式来通知它。客户端能通知服务器端的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GETPOSTPUTDELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源,如下图所示。

综合上述概念,我们可以得出:

  1. 需要注意的是,REST设计风格不是标准REST通常基于使用HTTP,URI,和XML以及HTML这些现有的广泛流行的协议和标准。
  2. REST描述的是在网络中client和server的一种交互形式;
  3. 一句话来说,RESTURL定位资源,用HTTP动词(GET, POST, DELETE, PUT)描述操作
  4. REST本身不实用,实用的是如何设计RESTful API(符合REST设计风格的网络接口);
  5. 在由Server提供的RESTful API中,URL中资源的指定通常只使用名词,原则上不使用动词。

在了解了REST相关概念之后,考虑一下为什么要用RESTful结构呢?

大家都知道”古代”网页是前端后端融在一起的,比如之前的PHP,JSP等。在之前的桌面时代问题不大,但是近年来移动互联网的发展,各种类型的Client层出不穷,RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。另外对于广大平台来说,比如Facebook platform,微博开放平台,微信公共平台等,它们不需要有显式的前端,只需要一套提供服务的接口,于是RESTful更是它们最好的选择。在RESTful架构下:

此外需要注意的是,REST架构风格有六条重要的约束:

  • 客户端-服务器(Client-Server)
    通信只能由客户端单方面发起,表现为请求-响应的形式。
  • 无状态(Stateless)
    通信的会话状态(Session State)应该全部由客户端负责维护。
  • 缓存(Cache)
    响应内容可以在通信链的某处被缓存,以改善网络效率。
  • 统一接口(Uniform Interface)
    通信链的组件之间通过统一的接口相互通信,以提高交互的可见性。
  • 分层系统(Layered System)
    通过限制组件的行为(即每个组件只能“看到”与其交互的紧邻层),将架构分解为若干等级的层。
  • 按需代码(Code-On-Demand,可选)
    支持通过下载并执行一些代码(例如Java Applet、Flash或JavaScript),对客户端的功能进行扩展。

相关参考链接:

https://restfulapi.net/

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


文章作者: &娴敲棋子&
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 &娴敲棋子& !
评论
  目录