Apifox 中提取接口响应数据的技巧,你掌握了吗?

在使用 Apifox 调试接口时,经常需要从接口的响应数据里提取特定的值,以便进一步处理和使用(通常用于发起其它请求),基本应用场景如下图所示:

一般来说,接口返回的数据可能是 JSON 格式或者 XML 格式。JSON 格式是最常见的一种,因为它简洁、易读且易于处理,所以学习如何解析 JSON 数据将是本文的重点。
对于响应数据,常需要进行处理的主要是响应头(Headers)以及响应正文(Body),接下来,便讲述二者的提取技巧。
提取响应头
假设一个接口返回的部分响应头如下所示:

若要提取 key 为 Session-Token 的整体值,你可以在接口的「后置操作」中直接填写 key 的名即可。

但是,如果要提取响应头中 Session-Token 值的某一部分,比如只想要后面 msToken 的值,这要怎么办?
这就需要通过脚本并配合正则表达式来进行提取了。
提取 Session-Token 中 msToken 的值,需要的脚本为:
pm.response.headers.toJSON()[2]['value'].toString().match(/msToken=([^;\s"]+)/)[1]
其具体解释如下:

在该脚本中,首先通过 pm.response.headers 拿到 Session-Token 的整体值;然后通过正则表达式进一步截取Session-Token 中 msToken 的值,但此时拿到的是一个数组,所以最后需要通过数组索引定位到具体的值。

提取响应正文
响应正文一般通过 JSONPath 表达式提取(当然也可以通过脚本),JSONPath 是一种用于在 JSON 结构中定位和提取数据的表达式语言,类似 XPath 用于 XML。
无论是提取单个字段还是复杂的嵌套结构,Apifox 的 JSONPath 提取功能都能满足你的需求。
基本提取思路
1. 在项目接口的「后置操作」中选择「提取变量」。

2. 填写 JSONPath 表达式等选项。

3. 设置完毕后发送请求,Apifox 将根据你提供的 JSONPath 表达式从响应数据中提取相应的字段值,提取出来的值会自动存储到「环境/全局/临时变量」里。

实践案例
假设客户端发送了一个请求,服务器返回以下响应正文(包含常见的数组、对象):

若你想提取「list」数组里面所有「id」字段的值,你可以使用 JSONPath 表达式 $.data.list[*].id ,Apifox 将会从响应数据中提取出对应字段的值,即:[10000,10001,10002]。
注:你可在 http://jsonpath.com/ 这个地址测试
其他常见响应值的提取

通过了解 JSONPath 语法和脚本的写作,并在 Apifox 的「后置操作」中应用合适的表达式,我们可以轻松而高效地处理接口响应数据。
尝试一下 Apifox 的 JSONPath 提取功能,让你的数据提取过程更加便捷和准确吧!
更多关于 Apifox 的实践内容可以前往 Apifox 官网查看哦!