RESTful 规范和Postman调试
RESTful 规范和Postman调试
什么是RESTful
RESTful的本质是一种软件架构风格,核心是面向资源设置API。作用是降低开发的复杂性,提高系统的可伸缩性。
设置概念和准则:
- 网络上的所有事物都可以被抽象为资源。
- 每一个资源都有唯一的资源表示,对资源的操作不会改变这些标识。
- 所有的操作都是无状态的。
什么是资源:资源,即网络上的一个实体,或者说网络上的具体信息,比如一段文本,一首歌等等。
HTTP协议
HTTP协议——URL
HTTP是一个属于应用层的协议,特点是简捷快速。
这是一条路径:schema://host[:port]/path[?query-string][#anchor]
- schema:指定低层使用的协议(例如http,https,ftp)
- host:服务器的IP地址或者域名
port - port:服务器端口,默认是80(https协议中默认是443)
- path:访问资源的路径
- query-string:发送给http服务器的数据
- anchor:锚
HTTP协议——请求
组成格式:请求行、消息报头、请求正文
请求行:
- 格式:Method Request-URL HTTP-Version CRLF(请求方法 请求地址 HTTP协议的版本 回车换行)
- 例子:GET/HTTP/1.1 CRLF
HTTP协议——响应
组成格式:状态行、消息报头、响应正文
状态行:
- 格式:HTTP-Version Status-Code Reason-Phrase CRLF(版本 响应状态码 响应内容 回车换行)
- 例子:HTTP/1.1 200 OK(即本次本次请求已经被服务器成功处理)
常用的状态码:
- 200 OK:客户端请求成功
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized:服务器收到请求,但是拒绝提供服务
- 404 Not Found:请求资源不存在
- 500 Internal Server Error:服务器发生不可预期 的错误
- 503 Server Unavailable:服务器当前不能处理客户端的请求
SOAP和REST的区别
SOAP WebService:WebService 是一种跨编程语言和跨操作平台的远程调用技术。WebService 通过HTTP协议发生请求和接收结果时采用XML格式封装,并增加了一些特定的HTTP消息头,这些特定的HTTP消息头和XML内容格式就是SOAP协议。
两者之间的区别:
- 效率性和易用性:SOAP由于各种需求不断扩充其本身协议的内容,导致在SOAP处理方面的性能有所下降。同时在易用性方面以及成本上也有所增加。RESTful由于其面向资源接口设计以及操作抽象简化了开发者的不良设计,同时也最大限度的利用了HTTP最初的应用协议设计理念。
- 安全性:RESTful对于资源型服务接口来说很适合,同时特别适合对于效率要求很高,但是对于安全要求不高的场景。SOAP的成熟性可以给需要提高给多开发语言的,对于安全性要求较高的接口设计带来便利。
如何设计RESTFul风格API(动物园为例)
RESTful设计要素:资源路径(URL)、HTTP动词、过滤信息、状态码、错误处理、返回结果。
- 资源路径:在RESTful架构中,每个网址代表一种资源,所以网址中不能有动词,只能有名词。一般来说API中的名词应该使用复数。例子:
https://api.example.com/v1/zoos //动物园资源
https://api.example.com/v1/animals //动物园资源
https://api.example.com/v1/employees //动物园资源 - HTTP动词:对于资源的操作(CRUD),由HTTP动词(谓词)表示。
GET:从服务器取出资源(一项或多项)。例子:GET/zoos/ID //获取某个指定动物园的信息
POST:在服务器新建一个资源。例子:POST/zoos //新建一个动物园
PUT:在服务器更新资源(客户端提供改变后的完整资源)。例子:PUT/zoos/ID //更新某个指定动物园的信息
DELETE:从服务器删除资源。例子:DELETE/zoos/ID //删除更新某个指定动
PATCH:在服务器更新资源(客户端提供改变的属性),很少使用。 - 过滤信息:如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。例子:
?offset=10:指定返回记录的开始位置。
?page=2&per_page=100:指定第几页,以及每页的记录数。
?sortby=name&order=asc:指定返回结果排序,以及排序顺序。
?animal_type_id=1:指定筛选条件。 - 状态码:服务器向用户返回的状态码和提示信息,使用标准HTTP状态码。
200 OK:服务器成功返回用户请求的数据,该操作是幂等的。
201 CREATED:新建或修改数据成功。
204 NO CONTENT:删除数据成功。
400 BAD REQUEST:用户发出的请求有错误。
401 Unauthorized:比嗾使用户没有认证,无法进行当前操作。
403 Forbidden:表示用户访问是禁止的。
422 Unprocesable Entity:当创建一个对象时,发生一个验证错误。
500 INTERNAL SERVER ERROR:服务器发生错误,用户将无法判断发出的请求是否成功。 - 错误处理:如果状态码是4xx或5xx,就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值即可。例如
{
“error” : “参数错误”
} - 返回结果:针对不同操作,服务器向用户返回的结果应该符合以下规范:
GET/collections:返回资源对象的列表(数组)。
GET/collections/identity:返回单个资源对象。
POST/collections:返回新生成的资源对象。
PUT/collections/identity:返回完整的资源对象。
DELETE/collections/identity:返回一个空的文档。
PATCH/collections/identity:返回被修改的属性。
REST风格的接口测试流程
测试有两种:手动测试和自动化测试。
手动测试:借助工具完成,拼接参数执行请求。
自动化测试:编写自动化脚本实现,一劳永逸,加入回归测试集合。
常见的测试工具:Postman、JMeter、RestClient
如何编写功能测试计划
业务流程——GET
- 正向用例:返回所以对象和返回某一个对象。
- 负向用例:一个不存在的id,URL输入不正确。
业务流程——POST
- 正向用例:输入正确参数新加一个对象。
- 负向用例:参数name为空或重复;参数age为0、-1、100、101、字符串、null;参数salary为整数、带小数、负数、null等
业务流程——PUT
- 正向用例:输入正确参数修改一个对象。
- 负向用例:参数id为空、无效值;参数name为空、重复;参数age为0、-1、100、101、字符串、null;参数salary为整数、带小数、负数、null
业务流程——DELETE
- 正向用例:删除所有对象或删除某一个对象。
- 负向用例:一个不存在的id,URL输入不正确。
如何使用Postman验证测试用例
数据库:user
数据库表:
查询:
删除:
修改:
增加: