使用文档
通用参数
调用接口时,除接口定义的参数,还需要通用参数,通用参数如下
Name | Type | Description | Notes |
---|---|---|---|
nonce | String | 随机字符串 | 32个字符以内 |
timestamp | String | 毫秒时间戳 |
通用参数位置
通用参数和接口的请求参数放在一样的位置
如果请求参数在http请求的请求体中(比如Post请求,请求数据为JSON类型),就将通用参数放在请求体中
接口定义POST /v1/pets 创建宠物 请求参数类型:application/json body: { "name":"kitty", "type":"英短", . . . "birthday":"2022-11-23" }
则通用参数添加到JSON的第一级路径里:
```
// 添加通用参数后的JSON
body:"name":"kitty",
"type":"英短",
.
.
.
"birthday":"2022-11-23",
"nonce":"kv2f89kl2m4", // 增加
"timestamp":"1701680591544" // 增加
}
* 如果请求参数在query string中,就将通用参数放在query string中;
接口定义
GET /v1/pets?key1=value1&key2=value2
通用参数添加到query string里
GET /v1/pets?key1=value1&key2=value2&nonce=kv2f89kl2m4×tamp=1701680591544
### 接口鉴权
#### AK+SK方式
AK+SK方式是拼接一个字符串放到http请求头的X-Idmesh-Signature中
字符串格式如下`<ak>$<hashMethod>$<signStr>`,其中“<>”用以标记变量
* ak表示 用户AK
* hashMethod 签名算法名称,小写,目前支持sm3
* signStr 签名结果,hex编码 签名内容约定:
<path><k=v><sk>
# path 为纯路径如:/v1/pets
# k=v 表示待签参数键值对,多个键值对按key字典正序排序后用'&'连接:k=v&k=v
# sk 表示用户SK
以上内容直接拼接,<>只用作标识变量
签名内容示例:/v1/petskey1=value1&key2=value2SK
最终鉴权字符串示例
xcoivuuo$sm3$xpociubiocvcvuobcivubocivuowejrklxucowkmerroixu==
http header:
"X-Idmesh-Signature:xcoivuuo$sm3$xpociubiocvcvuobcivubocivuowejrklxucowkmerroixu=="
### 调用示例
以查询组织的节点列表为例
#### GET /v1/tree-nodes
接口示例
| 名称 | 类型 | 是否必须 | 描述 | 备注 |
|------------ | ------------- | ------------- |------------- | -------------|
|**object_code** | **String** | true |组织编码||
|**name** | **String** | false |组织名称||
|**code** | **String** | false |组织编号||
|**tag** | **String** | false |标签||
|**time_modified_from** | **String** | false |更新时间起点||
|**time_modified_to** | **String** |false|更新时间终点,默认至今||
```javascript
const axios = require('axios');
const sm3 = require('sm3');
let ak = "GWbRVqtnNY5KBlHuPzNMpPht";
let sk = "8nBudksGstwwbOadc1XnarfblwsPWnH2";
let timestamp = Date.now();
// 设置请求参数
let param = {
nonce: "pxozuipoasdfiop",
timestamp: timestamp,
object_code: "867656852038131"
}
// 签名
let specKeys = ["timestamp","nonce"].sort(); // 签名字段目前只包含timestamp和nonce
let str = "/v1/tree-nodes";
for (let i = 0; i < specKeys.length; i++) {
str += `${specKeys[i]}=${param[specKeys[i]]}`;
if (i < specKeys.length - 1) {
str += '&';
}
}
str += `${sk}`;
// <用户AK>$SM3$<SM3摘要值>
const sign = `${ak}$sm3$${sm3(str)}`;
console.log("trace_id:",timestamp)
// 设置请求的headers
const headers = {
'X-Request-Id':timestamp, // 请求ID,如果需要的话
'X-Idmesh-Signature': sign, // 你的授权令牌,如果需要的话
}
// 发起GET请求
axios.get('http://service-gate.api.dev.idmesh.site/v1/tree-nodes', {
params: param,
headers: headers,
}).then(response => {
// 请求成功处理
console.log('响应数据:', response.data);
}).catch(error => {
// 请求失败处理
console.error('请求失败:', error);
});
修改时间 1 个月前