@aligames/maga-open
阿里游戏 API 网关 - Node.js SDK
提供了 API 的请求封装、摘要签名、响应解释、消息监听等功能,使用 SDK 可以轻松完成 API 的调用,API 结果的获取。
安装依赖
仅支持 Node.js 6.x 以上版本。
npm i @aligames/maga-open --save
使用方法
作为消费者,发起请求
- 通过
new Sdk.Client({ key, secret })
进行初始化,需要提供 key
,secret
配置。 - 使用
yield client.request({ service, data, options })
来封包,发送请求给服务端,以及解析服务端返回数据。
const Sdk = require('@aligames/maga-open');
const client = new Sdk.Client({
key: '<your_app_key>',
secret: '<your_app_secret>',
});
const result = yield client.request({
service: '/api/xxx',
data: {
uid: 'tz',
},
});
console.log(result.data);
并发组合请求:
const result = yield {
api1: client.request({ service: '/api/xxx', data: { uid: 'tz' } }),
api2: client.request({ service: '/api/yyy' }),
};
const data = {};
Object.keys(result).forEach(key => data[key] = result[key].data);
console.log(result.api1.data);
console.log(data);
错误处理:
try {
const result = yield client.request({
service: '/api/xxx',
data: {
uid: 'tz',
},
});
} catch (err) {
console.error(err);
}
对特定请求配置:
const config = {
service: '/api/xxx',
data: {
uid: 'tz',
},
};
const result = yield client.request(config, {
timeout: 100000,
required: false,
});
const combo = yield {
api1: client.request({ service: '/api/xxx', data: { uid: 'tz' } }),
api2: client.request({ service: '/api/yyy' }, { required: false }),
};
作为服务提供方,提供接口服务
- 通过
new Sdk.Server({ keystore })
进行初始化,需要提供 keystore
配置。 - 使用
server.decode({ meta, payload })
解析客户端传递过来的请求体,解析出错会抛错,请注意 try catch
处理。 - 使用
server.response({ result, id, code, msg })
对响应数据进行封包,返回 { meta, payload }
供开发者使用,前者用于配置 headers,后者是 buffer 直接返回给对端。
const Sdk = require('@aligames/maga-open');
const server = new Sdk.Server({
keystore: {
'<your_app_key>': '<your_app_secret>',
},
});
const body = server.decode({ meta: ctx.headers, payload: rawBody });
const result = { uid: 'tz', from: 'server' };
try {
const { meta, payload } = server.response({ id: id || Date.now(), code, msg, result });
ctx.set(meta);
ctx.body = payload;
} catch (err) {
ctx.status = err.code;
ctx.body = err;
}
调试
我们给开发者提供了 cli 命令,用于本地发起请求。
$ maga-cli request --key=<key> --secret=<secret> <payload json string>
$ maga-cli encode --key=<key> --secret=<secret> <payload json string>
$ maga-cli decode --key=<key> --secret=<secret> <payload base64 string>
示例:
$ node ./node_modules/.bin/maga-cli --key=ngclient
$ node bin/maga-cli.js --key=ngclient
质量
我们的类库严格遵循 Semver 版本规则,故强烈建议开发者通过 ^
的方式引入,即:
{
"dependencies": {
"@aligames/maga-open": "^1.0.0"
}
}
单元测试覆盖率:
=============================== Coverage summary ===============================
Statements : 100% ( 190/190 )
Branches : 100% ( 80/80 )
Functions : 100% ( 19/19 )
Lines : 100% ( 188/188 )
================================================================================
服务端开发
参见示例: https://github.com/aliplay-team/maga-client-nodejs-open-example
推荐使用我们开源的『企业级的 Node.js Web 基础框架』 - eggjs
反馈