貔貅WebSocket数据接口 (WebSocket API)

接口URI: wss://isbit.co:8080
返回结果格式: JSON

WebSocket API

貔貅WebSocket API为开发者提供一个实时性更强的数据通道。貔貅服务器能够将orderbook的变化以及市场成交数据通过websocket长连接实时的推送(push)给WebSocket API的用户。

使用WebSocket API可以分为简单的三步:

  1. 1. 建立websocket连接
  2. 2. 使用api token验证身份
  3. 3. 接收并处理数据

建立websocket连接

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

使用api token验证身份

在验证身份之前, 你必须准备好你的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"=>
    { "id"=>2435,
      "price"=>"3500.0",
      "volume"=>"0.0331",
      "funds"=>"115.85",
      "market"=>"btcmxn",
      "created_at"=>"2014-06-16T05:02:37Z",
      "side"=>"bid",
      "bid"=>{
        "id"=>3248, "side"=>"buy", "price"=>nil,
        "avg_price"=>"3500.0", "state"=>"done", "market"=>"btcmxn",
        "created_at"=>"2014-06-16T05:02:37Z", "volume"=>"0.0331",
        "remaining_volume"=>"0.0", "executed_volume"=>"0.0331"
      }
    }
}

Trade消息代表你的挂单有了新的成交.

price/volume: 成交价/成交数量

funds: 成交额(以报价货币为单位)

market: 基准货币/报价货币对

side: 你在这笔成交中的角色(ask: 卖方, bid: 买方)

ask或者bid: 成交后的挂单数据

Orderbook
{ "orderbook"=>
  { "action"=>"add",
    "order"=>{
      "id"=>3252,
      "timestamp"=>1402898864,
      "type"=>"ask",
      "volume"=>"1.0",
      "price"=>"3500.0",
      "market"=>"btcmxn",
      "ord_type"=>"limit"}
  }
}

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

相关库/工具列表