貔貅WebSocket API为开发者提供一个实时性更强的数据通道。貔貅服务器能够将orderbook的变化以及市场成交数据通过websocket长连接实时的推送(push)给WebSocket API的用户。
使用WebSocket API可以分为简单的三步:
WebSocket是应用广泛的标准,各种语言都有自己的支持库。以Javascript为例:
Javascript:
var host = 'wss://isbit.co:8080';
var socket = new WebSocket(host);
socket.onopen = function() {
console.log("opened");
}
socket.onmessage = function(msg) {
console.log(msg);
}
socket.onclose = function() {
console.log("closed");
}
还可以参考貔貅官方Ruby客户端的实现: https://github.com/isbitexchange/isbit-client-ruby/blob/master/lib/isbit_api/streaming_client.rb
在验证身份之前, 你必须准备好你的access/secret key. 在注册并认证通过后之后,只需访问API密钥页面就可以得到您的密钥。
当你通过上一步与貔貅服务器建立WebSocket连接之后,貔貅服务器会返回一条格式如下的challenge消息:
{"challenge":"d45sSFIZZdYzRgwi-zDqA8HFP2MfVoWqXlHX-2LbB_37q9_3pkZ8og"}
challenge包含一条随机生成的字符串, 客户端需要用access/secret key对这个字符串签名,然后将签名发回服务器,服务器对签名进行验证,正确则继续下一步,否则返回错误消息。
签名的生成很简单,首先把你的access key与challenge字符串连接:
payload = access_key + challenge
假设access key为"abc", challenge为"def", 则payload为"abcdef". 接下来用HMAC-SHA256和secret key计算payload的签名:
signature = HMAC-SHA256(secret_key, payload).to_hex
假设secret_key为'ghi', 用HMAC-SHA256对上例中的payload签名结果为:
signature = HMAC-SHA256('ghi', 'abcdef').to_hex
= '52ca0e5beab532532c62155e78d81c7dc8ad6d6f744cf3797668cf52dd2f9a41'
现在我们只需将得到的签名以如下格式传回服务器:
{auth: {access_key: 'your_access_key', answer: 'the_signature'}}
更多信息可以参考貔貅官方Ruby客户端的实现: https://github.com/isbitexchange/isbit-client-ruby/blob/master/lib/isbit_api/streaming_client.rb
验证通过后就可以接受服务器发送的实时数据了. 目前貔貅通过WebSocket API提供两类实时数据: Trade和Orderbook. 详细数据格式如下:
数据类型 | 数据结构/示例 | 备注 |
---|---|---|
Trade |
| Trade消息代表你的挂单有了新的成交. price/volume: 成交价/成交数量 funds: 成交额(以报价货币为单位) market: 基准货币/报价货币对 side: 你在这笔成交中的角色(ask: 卖方, bid: 买方) ask或者bid: 成交后的挂单数据 |
Orderbook |
| Orderbook消息代表orderbook有了变化. Orderbook add消息("action"=>"add")表示有新的order加入orderbook. Orderbook remove消息("action"=>"remove")表示orderbook移除了这个order (原因可能是用户取消挂单或者挂单完全成交). Orderbook update消息("action"=>"update")表示orderbook中的order被更新了. action: orderbook操作, 取值范围: add, remove, update order: 被操作的order |