使用yapi做接口管理/测试很方便,基础的用法不再介绍,这里记录自定义脚本的编写方法,主要参考官方文档:yapi 文档地址:https://hellosean1025.github.io/yapi/documents/project.html#token
首先yapi可以输入自定义脚本的地方有这么几个:
1.接口级别的
2.项目级别的脚本设置,可以用来处理请求参数,进行身份认证
这里主要记录项目级别的脚本编写,有几个问题:
1.console是输出到了那里呢?
console.log()是输出到浏览器的,按F12就可以
2.如何引入第三方依赖库?
yapi内置了基本的依赖库,可以进行常用的加密,网络请求等操作,依赖库是存在context.utils变量中,
3.如何发送网络请求?
从上图可以看到context.utils有一个axios依赖库,这是一个网络请求库
4.如何修改请求响应参数?
从上面可以看到有requestBody和responseData,requestHeader,responseHeader等对象,直接给相应的对象赋值就可以
这里贴一个简化版的代码,这是一个生成认证token的代码,其中crypto是crypto-js依赖库,搜索该库即可知道用法:
console.log("the context is:",context)
var crypto = context.utils.CryptoJS;
function GetTimeStamp() {
var now = new Date();
return now.getTime() - Math.round(namespace.TimeStamp);
}
function GetRandomString(cnt) {
var rndstr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var t = '';
if (cnt === null || cnt === undefined) cnt = 8;
for (var i = 0; i < cnt; i++) {
var r = Math.floor(Math.random() * 62);
t = t + rndstr[r];
}
return t;
}
function mac(token, hmackey, url, host, method, timeDifference) {
let digest = crypto.HmacSHA256(hmackey+":"+host+":"+url+":"+method, mackey);
return digest;
}
let body = { access_token: '7F938B2xxxxx',
expires_at: '2020-02-28T14:51:00.257+0800',
mac_key: 'QOqiKDBMiM',
refresh_token: '7F938B205F876FC3411849E1BB2F359A34578yyyyy',
server_time: '2020-02-21T14:51:00.259+0800',
user_id: 11111 };
console.log("hello world");
let mactoken = mac(body.access_token, body.mac_key, context.pathname, context.hostname, context.method, 0);
console.log("mactoken is :",mactoken);
context.requestHeader.Authorization = mactoken;
网络认证代码:
console.log(context);
var axio = context.utils.axios;
let authInfo = null;
axios.post('https://xxx.yyy.com/v0.93/tokens', {
'login_name': 'user001',
'password': "soi3223www",
'org_name': "test"
})
.then(function (response) {
console.log("response info:",response.data,response.body);
authInfo = response.data;
})
.catch(function (error) {
console.log(error);
});
更多axios的用法可以搜索axios依赖库,这里贴一个连接:https://www.kancloud.cn/yunye/axios/234845