Restful API 简介¶
为了简化DAPP的应用,我们以Restful API的方式提供给用户一种便捷的接入方法。通过HTTP对SDK的基础操作进行一系列封装,来实现对用户不同编程语言的兼容。
DAPP用户当调用客户端SDK有困难时,可以通过服务端调用的方式实现对联盟链SDK的接入。
URL设计¶
使用http作为API的通信协议,目前采用较多的POST方法。
url格式: http(s)://server.com/api/{module}/{version}/{method}
关于version,各模块支持多版本,默认version为v1.0
POST提交格式采用form表单参数 Content-Type: application/x-www-form-urlencoded
结构返回¶
返回体格式采用json格式
{
"success": true,
"message": "",
"data": "*********"
}
success: true - 成功 false - 失败
message: 失败时的错误信息
data: 接口返回数据
相关状态码
200 OK
403 token权限受限
404 接口不存在
接口访问控制¶
API访问控制,需先请求访问的用户名和密码,先调用auth接口请求访问token。
各api接口需要token参数调用,不然会返回403错误。
token有过期机制,目前是2小时有效。
私钥安全¶
对于账号私钥的安全提供了两种方案。
- dapp注册账户后,收到返回的私钥(privatekey),后续发送交易直接传递私钥
- dapp注册账户后,会返回一个加密串(encode),后续发送交易传递加密串和账户密码,系统会解码获得私钥进行签名。
Restful API 接口¶
API认证¶
请求访问token,提供权限调用API的其他接口
方法:auth
参数:
account: 授权账号
pwd: 授权账号密码
调用示例:
POST: http://139.198.126.104:8088/auth
BODY:account=******&pwd=******
返回数据示例
{
"success": true,
"message": "",
"data": "token内容"
}
账户注册¶
方法:register
参数:
pwd: 账户密码
token: auth返回的授权token
调用示例:
POST: http://139.198.126.104:8088/api/account/v1.0/register
BODY:pwd=********&token=********************************
返回数据示例
{
"success": true,
"message": "",
"address": 账户地址,
"encode": 账户加密串,
"keystore": 账户keystore信息,
"privateKey": 账户私钥
}
账户登录¶
方法:login
参数:
address: 账户地址
pwd: 账户密码
encode: 账户加密串
token: auth返回的授权token
调用示例:
POST: http://139.198.126.104:8088/api/account/v1.0/login
BODY:address=0x********&pwd=*****&encode=*******&token=************
返回数据示例
{
"success": true,
"message": "",
"data": 账户地址
}
账户余额¶
方法:getBalance
参数:
ssnip: 联盟链节点地址
ssnport: 联盟链节点端口
address: 账号地址
token: auth返回的授权token
调用示例:
POST: http://139.198.126.104:8088/api/ssn/v1.0/getBalance
BODY:ssnip=127.0.0.1&ssnport=8545&address=0x******&token=*****************
返回数据示例
{
"success": true,
"message": "",
"data": 账户余额 (联盟链原生币数量)
}
区块高度¶
方法:getBlockNumber
参数:
ssnip: 联盟链节点地址
ssnport: 联盟链节点端口
token: auth返回的授权token
调用示例:
POST: http://139.198.126.104:8088/api/ssn/v1.0/getBlockNumber
BODY:ssnip=127.0.0.1&ssnport=8545&token=***************
返回数据示例
{
"success": true,
"message": "",
"data": 区块高度
}
下次续费区块高度¶
方法:getBlockThreshold
参数:
ssnip: 联盟链节点地址
ssnport: 联盟链节点端口
token: auth返回的授权token
调用示例:
POST: http://139.198.126.104:8088/api/ssn/v1.0/getBlockThreshold
BODY:ssnip=127.0.0.1&ssnport=8545&token=***************
返回数据示例
{
"success": true,
"message": "",
"data": 续费区块高度
}
联盟链ssnID¶
方法:getSsnID
参数:
ssnip: 联盟链节点地址
ssnport: 联盟链节点端口
token: auth返回的授权token
调用示例:
POST: http://139.198.126.104:8088/api/ssn/v1.0/getSsnID
BODY:ssnip=127.0.0.1&ssnport=8545&token=***************
返回数据示例
{
"success": true,
"message": "",
"data": 联盟链ssnID
}
获得联盟链已注册合约列表¶
方法:getContractAddrList
参数:
ssnip: 联盟链节点地址
ssnport: 联盟链节点端口
token: auth返回的授权token
调用示例:
POST: http://139.198.126.104:8088/api/ssn/v1.0/getContractAddrList
BODY:ssnip=127.0.0.1&ssnport=8545&token=***************
返回数据示例
{
"success": true,
"message": "",
"data": 合约列表
}
获得联盟链详细信息¶
方法:getAppChainInfo
参数:
ssnip: 联盟链节点地址
ssnport: 联盟链节点端口
token: auth返回的授权token
调用示例:
POST: http://139.198.126.104:8088/api/ssn/v1.0/getAppChainInfo
BODY:ssnip=127.0.0.1&ssnport=8545&token=***************
返回数据示例
{
"success": true,
"message": "",
"data": 联盟链详细信息
}
区块信息¶
方法:getBlock
参数:
ssnip: 联盟链节点地址
ssnport: 联盟链节点端口
blocknum: 区块号或者区块hash
token: auth返回的授权token
调用示例:
POST: http://139.198.126.104:8088/api/ssn/v1.0/getBlock
BODY:ssnip=127.0.0.1&ssnport=8545&blocknum=10036&token=******************
返回数据示例
{
"success": true,
"message": "",
"data": 区块信息
}
交易明细¶
方法:getTransactionByHash
参数:
ssnip: 联盟链节点地址
ssnport: 联盟链节点端口
hash: 交易hash
token: auth返回的授权token
调用示例:
POST: http://139.198.126.104:8088/api/ssn/v1.0/getTransactionByHash
BODY:ssnip=127.0.0.1&ssnport=8545&hash=0x**&token=******************
返回数据示例
{
"success": true,
"message": "",
"data": 交易明细
}
交易详情¶
方法:getTransactionReceiptByHash
参数:
ssnip: 联盟链节点地址
ssnport: 联盟链节点端口
hash: 交易hash
token: auth返回的授权token
调用示例:
POST: http://139.198.126.104:8088/api/ssn/v1.0/getTransactionReceiptByHash
BODY:ssnip=127.0.0.1&ssnport=8545&hash=0x**&token=******************
返回数据示例
{
"success": true,
"message": "",
"data": 交易详情
}
转账¶
方法:transferCoin
参数:
ssnip: 联盟链节点地址
ssnport: 联盟链节点端口
from: 源账号地址
to: 目标账号地址
amount: 数量(联盟链原生币数量)
data: 备注信息
privatekey: 源账号私钥 (传privatekey,可忽略参数pwd和encode,不传privatekey,则必须传pwd和encode认证)
pwd: 账户密码
encode: 账户加密串
token: auth返回的授权token
调用示例:
POST: http://139.198.126.104:8088/api/ssn/v1.0/transferCoin
BODY:ssnip=127.0.0.1&ssnport=8545&from=0x**&to=0x***&amount=10&data=*****&privatekey=0x**&token=*******
返回数据示例
{
"success": true,
"message": "",
"data": 交易hash
}
调用智能合约¶
方法:callContract
参数:
ssnip: 联盟链节点地址
ssnport: 联盟链节点端口
contractaddress: 合约地址
param: 例如合约中存在一个无参的方法getDechatInfo,则传入["getDechatInfo"];
若存在一个有参的方法getTopicList(uint pageNum, uint pageSize), 则传入["getTopicList", 0, 20]
token: auth返回的授权token
调用示例:
POST: http://139.198.126.104:8088/api/ssn/v1.0/callContract
BODY:ssnip=127.0.0.1&ssnport=8545&contractaddress=0x*****¶m=["getTopicList", 0, 20]&token=***********
返回数据示例
{
"success": true,
"message": "",
"data": 调用合约返回结果
}