外观
RunAPI 接口调试工具
约 876 字大约 3 分钟
2025-06-19
RunAPI 是一款开源的 API 调试工具,支持接口测试、Mock、自动化执行等功能,可替代 Postman 等工具。
简介
RunAPI 是一个基于 Node.js 的 API 测试工具,可以用来测试 API 的正确性。它提供了可视化的接口管理、请求调试、自动化测试等功能。
主要特性
- 📋 接口管理:可视化编辑和管理 API 接口
- 🔧 请求调试:支持 GET、POST、PUT、DELETE 等常见 HTTP 方法
- 🤖 自动化执行:支持批量执行接口用例
- ✍️ 脚本扩展:支持在请求前后执行自定义 JavaScript 脚本
- 🔐 签名支持:可在 Pre-request Script 中动态生成签名
安装
# 全局安装
npm install -g runapi
# 或直接下载桌面客户端
# https://github.com/fast-crud/runapi基本用法
1. 创建接口
在 RunAPI 中新建接口,填写 URL、请求方法、Headers 和 Body 等信息。
2. 添加前置脚本
在接口的 Pre-request Script 中可以编写 JavaScript 代码,用于动态设置请求头、生成签名等。
3. 添加后置脚本
在接口的 Test Script 中可以编写断言,验证响应是否符合预期。
签名脚本案例
以下是一个完整的 API 签名生成示例,适用于需要 appId、timestamp、signature 认证的场景:
// ========== 1. 获取环境变量 ==========
var appId = runapi.getVar("app_id");
var appSecret = runapi.getVar("app_secret");
// ========== 2. 设置基础请求头 ==========
runapi.setHeader("X-App-Id", appId);
// 获取当前时间戳(秒级)
var timestamp = Math.floor(Date.now() / 1000);
runapi.setHeader("X-Timestamp", timestamp);
// ========== 3. 收集所有参数 ==========
var paramsHandle = {};
var method = runapi.getMethod();
if (method === 'GET') {
// GET 请求参数从 Query 中获取
var params = runapi.getAllQuery();
if (params) {
params.forEach(function(item) {
paramsHandle[item.name] = item.value;
});
}
} else {
// POST 等非 GET 请求参数从 Body 中获取
var params = runapi.getParamJson();
if (params) {
for (var key in params) {
paramsHandle[key] = params[key];
}
}
}
// ========== 4. 参数按 key 排序 ==========
var sortedParams = {};
Object.keys(paramsHandle).sort().forEach(function(key) {
sortedParams[key] = paramsHandle[key];
});
// ========== 5. 构建签名字符串 ==========
var stringToSign = appId + timestamp;
for (var key in sortedParams) {
var value = sortedParams[key];
// 处理数组和对象:JSON 序列化 + Base64 编码
if (Array.isArray(value) || (typeof value === 'object' && value !== null)) {
var jsonString = JSON.stringify(value);
value = btoa(jsonString);
}
// 只拼接字符串和数字类型
if (typeof value === 'string' || typeof value === 'number') {
stringToSign += key + value;
}
}
// ========== 6. 生成签名 ==========
var signature = runapi.CryptoJS.HmacSHA256(stringToSign, appSecret).toString();
// 如需 MD5 签名,可取消下面这行的注释
// var signature = runapi.CryptoJS.MD5(stringToSign).toString();
// ========== 7. 设置签名请求头 ==========
runapi.setHeader("X-Signature", signature);使用说明
- 在 RunAPI 的 全局变量 中配置
app_id和app_secret - 将上述脚本粘贴到接口的 Pre-request Script 中
- 发送请求后,RunAPI 会自动计算签名并注入
X-Signature请求头
签名逻辑说明
sign = HmacSHA256(appId + timestamp + sortedKeyValues, appSecret)其中 sortedKeyValues 是将所有参数按 key 字典序排序后拼接而成的字符串。
常用 API
| 方法 | 说明 |
|---|---|
runapi.getVar(name) | 获取全局变量 |
runapi.setVar(name, value) | 设置全局变量 |
runapi.getMethod() | 获取请求方法(GET/POST 等) |
runapi.getAllQuery() | 获取 GET 查询参数 |
runapi.getParamJson() | 获取 JSON 格式的 Body 参数 |
runapi.setHeader(key, value) | 设置请求头 |
runapi.CryptoJS | 内置 CryptoJS 库,支持 MD5、HmacSHA256 等 |
常见问题
Q: 签名验证失败怎么办?
- 检查
app_id和app_secret是否正确 - 确认参数排序逻辑与服务端一致
- 检查时间戳是否为秒级(非毫秒级)
Q: 如何调试脚本?
可以在脚本中使用 console.log() 输出中间变量,在 RunAPI 的控制台中查看。
