接口规范
QLEN平台接口提供RESTful风格的WebAPI来实现对外服务,为了描述清楚这些接口,下面将从接口地址、HTTP方法、请求参数、响应结果这几个方面来详细说明。
1. 接口地址
接口地址,所有QLEN接口地址的前缀统一都是QLEN平台的接口网址(生产环境:https://api.qlen.cn/v1,沙箱环境:https://demoapi.qlen.cn/v1),后面跟接口URI,接口URI将在各个接口中具体说明。
2. HTTP方法
HTTP方法,QLEN接口利用HTTP协议的GET
、POST
、PUT
、DELETE
方法来区分对资源的操作类型,如下表:
HTTP方法 | 作用 |
---|---|
GET | 用于获取数据 |
POST | 用于提交新建数据 |
PUT | 用于提交修改数据 |
DELETE | 用于删除数据 |
3. 请求参数
请求参数,除了名称和类型外,还要描述两个方面:一是是否为必需项,如果不是必需项,则在传参时可以根据需要省略,服务端会使用默认值代替;另一个就是参数传入方式,说明如下:
传参方式 | 说明 |
---|---|
query | 参数以查询字符串的形式跟在URI后面,如:/token?seq=123 |
path | 参数作为URI的一部分,如:/node/seq/123 |
json | 参数以JSON格式封装成结构体,然后在请求中以Content-Type: application/json类型提交 |
file | 参数是上传文件,文件以Content-Type: multipart/form-data类型提交 |
4. 响应结果
响应结果,包括HTTP协议中的状态码和响应结构体,下面详细描述。
4.1 状态码
QLEN接口主要利用了以下一些HTTP状态码:
态码 | 含义 | 作用 |
---|---|---|
200 | OK | 表示请求成功,没有错误发生 |
400 | Bad Request | 表示参数格式不正确 |
401 | Unauthorized | 表示不允许客户端访问资源 |
404 | Not Found | 表示请求的资源不存在 |
500 | Internal Server Error | 表示服务器内部错误 |
4.2. 响应结构体
响应结构体是服务端执行完用户请求后返回的结果,QLEN接口返回的响应结构体统一以JSON格式封装,响应结构体各属性描述如下:
属性 | 类型 | 作用 |
---|---|---|
status | 布尔型 | 指示请求是否成功 |
code | 整型 | 请求失败时的错误编码 |
message | 字符串 | 请求失败时的错误类型 |
data | 复合型 | 请求成功时返回的是结果数据,失败时返回的是错误提示信息 |
- 请求成功的返回结构体示例:
{
"status":true,
"code":0,
"message":"OK",
"data":"d7e4045f8ddf4ed7beeb2db402fb4686"
}
- 请求失败的返回结构体示例:
{
"status":false,
"code":211,
"message":"PARAM_INVALID",
"data":"引用哈希必须为64位十六进制字符"
}
4.3. 请求成功响应
请求成功时,HTTP状态码
固定为200
。响应结构体中status
, code
, message
的值也都是固定的,分别为
"status":true
"code":0
"message":"OK"
而data
则随请求的不同有不同的结构,下面对几种复杂结构加以说明:
node
:契链节点
属性 | 类型 | 作用 |
---|---|---|
version | 整型 | 版本,固定为0xFFFE,即-2 |
nodeHash | 字符串 | 节点哈希,64位十六进制编码 |
nodeSeq | 整型 | 节点序号 |
timestamp | 整型 | 时间戳,单位:毫秒 |
nonce | 整型 | 随机数 |
lastHash | 字符串 | 父节点哈希,64位十六进制编码 |
referHash | 字符串 | 引用哈希,64位十六进制编码 |
userId | 字符串 | 用户编码,32位十六进制编码 |
serviceId | 字符串 | 服务编码,32位十六进制编码 |
label | 整型 | 信息标签 |
infoHash | 字符串 | 信息哈希,64位十六进制编码 |
infoId | 字符串 | 信息标识,不超过64位ASCII字符 |
pager
:分页结构体
属性 | 类型 | 作用 |
---|---|---|
totalElments | 整型 | 总记录数 |
totalPages | 整型 | 总页数 |
pageSize | 整型 | 每页记录数 |
pageNumber | 整型 | 当前页码 |
elements | 复合型 | 当前页中的记录数组 |
nsum
:节点统计信息
属性 | 类型 | 作用 |
---|---|---|
nodeCount | 整型 | 节点总数 |
userCount | 整型 | 用户总数 |
vendorCount | 整型 | 服务商总数 |
vsum
:服务统计信息
属性 | 类型 | 作用 |
---|---|---|
vendorId | 字符串 | 服务编码 |
count | 整型 | 该服务编码创建的节点总数 |
4.4. 请求失败响应
请求失败时,HTTP状态码
为除200以外的其他编码,具体视错误类型来决定。响应结构体中status
固定为false
,data
为附加错误消息,而code
和message
的值则随错误的不同而不同,具体如下表所示:
错误编码 | 错误名称 | 错误说明 |
---|---|---|
100 | PATH_INVALID | 无效页面或网址 |
101 | DIGEST_FAILED | 提取文件摘要失败 |
102 | QCHAIN_FAILED | QChain访问失败 |
201 | TOKEN_EXPIRED | 令牌过期 |
202 | TOKEN_INVALID | 令牌解析失败 |
211 | PARAM_INVALID | 参数不合规 |
301 | SERVICE_AUTH_FAILED | 服务认证失败 |
302 | SERVICE_UNMATCH | 服务编码不符 |
303 | SERVICE_INEXIST | 服务编码不存在 |
304 | SERVICE_INVALID | 服务未审核或已禁用 |
305 | USERID_INEXIST | 用户编码不存在 |
311 | COIN_LACKING | 账户余额不足 |
401 | ESCROW_NOFILE | 未发现可用的上传文件 |
402 | ESCROW_UPLOAD_FAILED | 文件上传失败 |
403 | ESCROW_SAVE_FAILED | 文件保存失败 |
404 | ESCROW_EXIST | 存证文件已存在 |
421 | DOWNLOAD_NOFILE | 文件不存在 |
422 | DOWNLOAD_FAILED | 文件下载失败 |
501 | NODE_INEXIST | 节点不存在 |
502 | NODE_NOESCROW | 节点公证文件未存证 |
503 | NODE_INFO_EXIST | 信息哈希已存在,信息已公证 |
504 | NODE_REFER_INEXIST | 引用节点不存在 |
505 | NODE_INNER_UNMATCH | 内联引用时不能引用其他服务的节点 |
999 | OTHER | 其他异常 |