Apifox 中怎么获取当前请求接口的 URL?
在使用 Apifox 调试接口的过程中,有时需要将接口的 URL(或者称为路由)提取出来,以便用作其它用途,比如将 URL 上携带的参数做加密处理、将参数提取到环境变量供其它接口使用等。下面就来介绍怎么在 Apifox 中提取接口的 URL。
实现流程概述
总体来说,要提取接口的 URL,只需要在接口的“前置操作”或者“后置操作”中写一个pm.request
脚本。
request 是接口请求对象。在前置脚本中表示“将要发送的请求”,在后置脚本中表示“已经发送了的请求”。
pm.request 脚本规则如下所示:
pm.request.url
:当前请求的 URL。pm.request.getBaseUrl()
:获取当前运行环境选择的的前置 URL
pm.request.body
:当前请求的请求体。
本文主要用到的就是这三个规则,更多的使用规则你可以访问 Apifox 帮助文档的 pm.request 模块。
实践案例
第一步:新建接口
如果你已经有接口可测试,可忽略这一步。
在 Apifox 中新建一个项目后,选择右上角的“云端 Mock”,如果没开启,需要去开启。然后在“修改文档”页面填写请求路径、Query 参数、请求 Body 和 返回响应,如下图所示:
当接口定义完毕,我们可以发送请求,如下图所示,成功返回了响应数据(数据由 Apifox 的 Mock 功能提供)
第二步:编写脚本
接口能正常调试,现在开始编写前置脚本,以提取接口的 URL。
假设当前接口的请求 URL 为:
https://mock.apifox.cn/m1/xxx-0-default/getUrl?id=1&type=apple
当前接口的请求 Body 为:
NAME | VALUE |
username | Toms |
password | 123456 |
注:下文中的脚本只输出到了控制台中,你也可以将值提取到环境变量或者全局变量里去
- 要提取出
https://mock.apifox.cn/m1/xxx-0-default/getUrl
,我们可以编写以下 Javascript 脚本:
let preUrl = pm.request.getBaseUrl();
console.log(preUrl);
其输出结果如下图所示:
2. 要取出id=1&type=apple
的参数值,我们可以编写以下 Javascript 脚本:
let getQueryUrl = pm.request.url.query;
console.log(getQueryUrl.get("id"));
console.log(getQueryUrl.get("type"));
其输出结果如下图所示:
如上图所示,虽然把值提取出来了,但是输出都是 String 字符串的形式,这样似乎不太合理,因为有些是 integer 类型的参数。所以我们可以优化一下脚本,让其自动处理一下,优化后的脚本如下:
let getQueryUrl = pm.request.url.query;
let a = getQueryUrl.get("id");
console.log(isNaN(a) ? a : parseInt(a));
let b = getQueryUrl.get("type");
console.log(isNaN(b) ? b : parseInt(b));
脚本主要用 Javascript 中的 isNaN() 方法来判断, isNaN() 方法会尝试将参数进行类型转换,对于非数字的字符串、对象或布尔值会返回 true
。脚本最后通过三元运算符来判断,如果是 true
,则返回 ?
后面的,如果是 false
(integer 类型),则返回 :
后面的值,其结果如下图所示:
3. 要取出当前接口的请求 Body,我们可以编写以下 Javascript 脚本:
let getBody = pm.request.body;
console.log(getBody.formdata.get("username"));
console.log(getBody.formdata.get("password"));
其输出结果如下图所示:
从以上的三个脚本中可以看到,我们在最后提取值的时候都用到了.get()
方法,.get() 方法适用于提取 "key"和"value" 形式的对象,如下图所示:
常见问题与解决方案
1.为什么在前置或者后置操作里编写了脚本,但是分享给其它团队成员的时候,他们却看不到?
答:如果其它团队成员看不到,那大概率是因为你的前置脚本写在了“运行”页面,你需要将脚本移动到“修改文档”页面,“运行”页面仅作调试使用,如下图所示:
2. 脚本是固定的吗?下次遇到其它问题的时候怎么办?
答:脚本并非完全固定,只是有一定的 API 规范,具体你可以参考 Apifox 帮助文档的脚本 API 参考模块。根据给出的 API 来编写脚本,并按照输出的 JSON 响应来一步步定位到想要的值。如下图所示,pm.request.url
脚本只列出全部的返回响应,想要更具体的值,就需要一步步的往下一层级定位,就像上面的实践案例。
总结
以上就是在 Apifox 中获取当前请求接口 URL 的方法,主要是通过pm.request
脚本来提取。想要了解更多知识,可以访问 Apifox 的官方帮助文档。
知识扩展: