山海鲸可视化

API预处理和后处理

一、整体概念

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


它通常包含 3 个部分:

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

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

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

二、语法说明

脚本使用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

三、脚本里可直接使用的核心对象

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

2. pm.sendRequest

用途:

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


示例:

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

3. pm.response.data

用途:

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

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

1. 读取原始返回值

2. 改写最终输出值


示例:

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

四、变量占位符语法

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

引用方式:

{{变量名}}


示例:

1. Authorization: Bearer {{accessToken}}

2. appId: {{clientId}}


典型用途:

1. 预处理脚本先刷新 token

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

image.png

五、预处理(Pre-request)用途

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

1. 鉴权准备,如请求前自动续签。

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

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

六、后处理(Post-response)用途

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

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

2. 字段归并和业务统计

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

4. 输出最终结果

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

七、实际使用场景举例

场景 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. 最后分别写入明细表和总计表