Apifox 中怎么获取当前请求接口的 URL?

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 中定义路径、Query 参数
定义路径、Query 参数
Apifox 中定义请求 Body
定义请求 Body

当接口定义完毕,我们可以发送请求,如下图所示,成功返回了响应数据(数据由 Apifox 的 Mock 功能提供)

在 Apifox 中调试接口
接口定义成功

第二步:编写脚本

接口能正常调试,现在开始编写前置脚本,以提取接口的 URL。


假设当前接口的请求 URL 为:

https://mock.apifox.cn/m1/xxx-0-default/getUrl?id=1&type=apple

当前接口的请求 Body 为:

NAME
VALUE
username
Toms
password
123456

注:下文中的脚本只输出到了控制台中,你也可以将值提取到环境变量或者全局变量里去

  1. 要提取出https://mock.apifox.cn/m1/xxx-0-default/getUrl,我们可以编写以下 Javascript 脚本:
let preUrl = pm.request.getBaseUrl();
console.log(preUrl);

其输出结果如下图所示:

Apifox 中提取前置 URL
提取前置 URL

2. 要取出id=1&type=apple的参数值,我们可以编写以下 Javascript 脚本:

let getQueryUrl = pm.request.url.query;
console.log(getQueryUrl.get("id"));
console.log(getQueryUrl.get("type"));

其输出结果如下图所示:

提取 Query 参数
提取 Query 参数

如上图所示,虽然把值提取出来了,但是输出都是 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 类型),则返回 :后面的值,其结果如下图所示:

提取优化后的 Query 参数
提取优化后的 Query 参数

3. 要取出当前接口的请求 Body,我们可以编写以下 Javascript 脚本:

let getBody = pm.request.body;

console.log(getBody.formdata.get("username"));
console.log(getBody.formdata.get("password"));

其输出结果如下图所示:

提取请求 Body
提取请求 Body


从以上的三个脚本中可以看到,我们在最后提取值的时候都用到了.get()方法,.get() 方法适用于提取 "key"和"value" 形式的对象,如下图所示:

Apifox 使用 get() 方法提取具体值
get() 方法提取具体值

常见问题与解决方案

1.为什么在前置或者后置操作里编写了脚本,但是分享给其它团队成员的时候,他们却看不到?

答:如果其它团队成员看不到,那大概率是因为你的前置脚本写在了“运行”页面,你需要将脚本移动到“修改文档”页面,“运行”页面仅作调试使用,如下图所示:

在“修改文档”页编写脚本
在“修改文档”页编写脚本

2. 脚本是固定的吗?下次遇到其它问题的时候怎么办?

答:脚本并非完全固定,只是有一定的 API 规范,具体你可以参考 Apifox 帮助文档的脚本 API 参考模块。根据给出的 API 来编写脚本,并按照输出的 JSON 响应来一步步定位到想要的值。如下图所示,pm.request.url脚本只列出全部的返回响应,想要更具体的值,就需要一步步的往下一层级定位,就像上面的实践案例。

Apifox 中的脚本 API
Apifox 中的脚本 API


总结

以上就是在 Apifox 中获取当前请求接口 URL 的方法,主要是通过pm.request脚本来提取。想要了解更多知识,可以访问 Apifox 的官方帮助文档

知识扩展:

订阅
qrcode

订阅

随时随地获取 Apifox 最新动态