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

RESTful 规范和Postman调试

如何编写功能测试计划

业务流程——GET

  1. 正向用例:返回所以对象和返回某一个对象。
  2. 负向用例:一个不存在的id,URL输入不正确。

业务流程——POST

  1. 正向用例:输入正确参数新加一个对象。
  2. 负向用例:参数name为空或重复;参数age为0、-1、100、101、字符串、null;参数salary为整数、带小数、负数、null等

业务流程——PUT

  1. 正向用例:输入正确参数修改一个对象。
  2. 负向用例:参数id为空、无效值;参数name为空、重复;参数age为0、-1、100、101、字符串、null;参数salary为整数、带小数、负数、null

业务流程——DELETE

  1. 正向用例:删除所有对象或删除某一个对象。
  2. 负向用例:一个不存在的id,URL输入不正确。

如何使用Postman验证测试用例

数据库:user

数据库表:
RESTful 规范和Postman调试

查询:
RESTful 规范和Postman调试
删除:
RESTful 规范和Postman调试
RESTful 规范和Postman调试

修改:
RESTful 规范和Postman调试
RESTful 规范和Postman调试

增加:
RESTful 规范和Postman调试
RESTful 规范和Postman调试