山海鲸可视化

API预处理和后处理说明

1. 整体概念

这套“连接 API”能力,本质上是一个“请求前可编程 + 请求后可编程”的接口节点。


它通常包含 3 个部分:

1)变量区:存放可复用的动态值,例如 accessToken、refreshToken、clientId;

2)预处理脚本(Pre-request):主请求发送前执行,用来准备变量、鉴权、拼装请求前置数据;

3)后处理脚本(Post-response):主请求返回后执行,用来改造响应数据、二次请求、统计汇总、写回其他接口。

2. 语法说明

脚本使用JavaScript。

示例 1:预处理常见写法。

(async () => {
  var accessToken = pm.variables.get("accessToken");
  if (!accessToken) {
    var res = await pm.sendRequest({
      method: "post",
      url: "https://example.com/token"
    });
    pm.variables.set("accessToken", res.data.access_token);
  }
})();

image.png


示例 2:后处理常见写法。

(async function () {
  const data = pm.response.data || {};
  const list = [];
  for (let i in data.dataList) {
    list.push(data.dataList[i]);
  }
  pm.response.data = list;
})();

image.png

3. 脚本里可直接使用的核心对象

3.1 pm.variables

用途:

用于在脚本和请求配置之间共享变量。


1. 获取值

pm.variables.get("变量名")

2. 更新值

pm.variables.set("变量名", 值)

示例:

var accessToken = pm.variables.get("accessToken");
pm.variables.set("time", Date.now());

使用场景:

token、refreshToken、过期时间等会在api参数、请求头、请求体等地方用到的变量。

image.png

3.2 pm.sendRequest

用途:

在脚本内部再发起一次 HTTP 请求(参考Axios写法)。


示例:

var res = await pm.sendRequest({
  method: "post",
  url: "https://example.com/api",
  headers: {
    "Content-Type": "application/json"
  },
  data:{
    id: 1
  }
});

3.3 pm.response.data

用途:

表示当前主请求返回后的响应数据。

后处理阶段最常见的用法有两种:

1)读取原始返回值;

2)改写最终输出值。


示例:

const data = pm.response.data || {};
pm.response.data = data2;

4. 变量占位符语法

界面中的请求参数、请求头、请求体、认证信息,可以引用变量。


引用方式:

{{变量名}}

示例:

1)

Authorization: Bearer {{accessToken}}

2)

appId: {{clientId}}

典型用途:

1)预处理脚本先刷新 token;

2)再由请求头里的 {{accessToken}} 自动带入主请求。

image.png

5. 预处理(Pre-request)用途

预处理是在主请求发送前执行。

1)鉴权准备,如请求前自动续签;

2)动态申请令牌,可以独立调用登录接口、刷新接口,然后把结果写回变量池;

3)生成主请求所需参数,如计算时间范围、生成签名、拼装动态 query 参数、生成 body 中的加密字段等。

6. 后处理(Post-response)用途

后处理是在主请求返回后执行。

1)响应结构扁平化,把复杂树形/分组结构,转换为前端表格或图表更容易直接消费的一维数组;

2)字段归并和业务统计;

3)调用其他接口共同对返回结果进行处理计算等;

4)输出最终结果。

可以把当前接口的原始返回,改成最终需要给下游使用的结构。

7. 实际使用场景举例

场景 1:自动鉴权

1)预处理读取 accessToken、refreshToken;

2)如过期则调用登录/刷新接口;

3)把新 token 写回 pm.variables;

4)请求头中使用 Authorization: Bearer {{accessToken}};

5)主请求自动带最新 token。


场景 2:动态 URL / 查询参数

1)预处理计算时间范围、项目 ID、设备 ID;

2)写入变量;

3)URL 或请求参数中用 {{startTime}}、{{deviceId}};

4)主请求按动态参数发送。


场景 3:动态请求体

1)预处理先生成 body 需要的字段;

2)变量区保存中间值;

3)请求体中通过 {{变量名}} 注入;

4)主请求无需手工改 JSON。


场景 4:主请求后再写其他系统

1)主请求拿到原始业务数据;

2)后处理做清洗、映射、计算;

3)用 pm.sendRequest() 把整理结果写到别的接口;

4)当前节点再输出一份适合页面使用的简化结果。


场景 5:增量计算

1)先读取上一次存档;

2)计算当前值与历史值的差额;

3)再得到今日增量、累计值等指标;

4)最后分别写入明细表和总计表。