一、什么是RESTful
1.1来源
REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。Roy Fielding是 HTTP 规范的主要编写者之一、Apache服务器软件的作者之一、Apache基金会的第一任主席。
1.2名称解释
REST,即Resource Representational State Transfer的缩写。意思是:“表现层状态转移”。
Resource:资源,即"数据",你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符;
Representational:某种表现形式--"资源"具体呈现出来的形式,比如用JSON,XML,JPEG等;
State Transfer:状态变化。通过HTTP动词实现(GET、POST、PUT、DELETE等)。互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。
RESTful API就是REST风格的接口,RESTful是一种软件架构风格,而不是标准。
二、REST和SOAP的区别
2.1什么是SOAP
SOAP (Simple Object Access Protocol) 顾名思义,是一个严格定义的信息交换协议,用于在Web Service中把远程调用和返回封装成机器可读的格式化数据。事实上SOAP数据使用XML数据格式,定义了一整套复杂的标签,以描述调用的远程过程、参数、返回值和出错信息等等。总的来说,它是交换数据的一种规范,是一种轻量级的、简单的、基于xml的协议。
2.2两者区别
1.安全性:SOAP优于REST
2.效率和易用性:REST更胜一筹
3.成熟度:SOAP优于REST
4.REST是一种风格,而SOAP是一种协议
三、设计RESTful风格API
3.1、通信协议
采用Http协议,对于资源的具体操作类型,常用的HTTP动词有下面五个:
GET:从服务器取出资源(一项或多项)。
POST:在服务器新建一个资源。
PUT:在服务器更新资源(客户端提供改变后的完整资源)。
PATCH:在服务器更新资源(客户端提供改变的属性)。
DELETE:从服务器删除资源。
3.2、用 URL 定位资源
REST 的主体是资源,所谓“资源”,即数据,就是网络上的一个具体信息,例如:一张图片,一段文字、一种服务,所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。总之就是一个实际存在的东西,而 URL 就是用来指向这个资源的。
举例来说,有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,则它的路径应该设计成下面这样。
https://api.example.com/zoos
https://api.example.com/animals
https://api.example.com/employees
3.3、用 HTTP 动词描述操作
GET /zoos:列出所有动物园
POST /zoos:新建一个动物园
GET /zoos/ID:获取某个指定动物园的信息
PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE /zoos/ID:删除某个动物园
GET /zoos/ID/animals:列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物
四、RESTful 的其他细节
4.1、命名规则
- 全部小写,用 _ 或 - 线连接。(之所以不用驼峰命名法,是因为早期的 URI 一般都是表示服务器上的文件路径,而不同服务器对大小写的敏感性是不同的,为了兼容不同服务器所以才规定不能混用大小写字母。)
- URL 中只用名词指定资源,因为 REST 的核心是资源,而表示资源的词语天然就是名词。
- 资源用复数表示。
4.2、版本
一种方法是在 URL 中添加版本号,例如:
https://api.example.com/v1/zoos
另一种方法是将版本号加在 HTTP 请求头信息的 Accept 字段中,例如:
Accept: version=1.0
网上能找到的版本号加在 URL 中的例子,都是如我上例所示的写法。但是 Jack_Zeng 指出,这样写容易有歧义,会让人误以为 v1 也是资源的一部分,一般都是这么写:
https://api.example.com/zoos?api-version=1
五、RESTful接口测试
专业的测试步骤:
5.1、测试的方法(列举其中两种)
1.采用Postman测试工具
2.采用swagger(不做介绍)
5.1.1、Postman的主要功能
- 可以模拟各种HTTP 请求
- Collection 功能(测试集合)
- 人性化的Response整理
- 内置测试脚本语言
- 设定变量与环境
5.1.2、HTTP Header
Accept: 指定客户端能够接收的内容类型
Accept-Charset: 浏览器可以接收的字符编码集
Authorization: HTTP授权证书
Content-Type: 请求的与实体对应的MIME信息
Referer: 先前的网页的地址,当前请求网页紧随其后,及来路
5.2、编写测试计划
了解完接口的格式之后,根据项目中的业务需求编写测试计划。现在有一个业务需求:
GET : http://localhost:8080/api/users/list
header : Content-Type = application/json
body : 空
Response : 返回所有User对象
Status code : 200
测试计划:
实行的测试用例分为两种:
正向的测试用例 : 返回所有对象
负向的测试用例 : URL输入不正确
5.3、使用Postman进行用例的测试
正向测试用例:
在Tests里写下验证测试结果信息:
正向测试用例的返回结果:
负向测试用例:
修改为错误路径 http://localhost:8080/api/users/info
负向测试用例的返回结果:
相关教程
https://www.imooc.com/learn/811
https://www.imooc.com/learn/1048