简单二进制编码(SBE)常见问题
本文档的目标是解释下列疑问:
- 如何在现货交易API中启用
SBE响应。 - 如何对
SBE的响应进行解码。
SBE 是一种用于实现低延迟的序列化格式。
本实现是基于 FIX SBE 规范。
如何获取 SBE 响应
REST API
Accept报文头必须包含application/sbe。- 在
X-MBX-SBE报文头中以<ID>:<VERSION>的形式提供schema ID和version。
样本请求(REST):
curl -sX GET -H "Accept: application/sbe" -H "X-MBX-SBE: 1:0" 'https://api.binance.com/api/v3/exchangeInfo?symbol=BTCUSDT'
注意:
- 如果你只在
Accept报文头中提供了application/sbe- 如果交易所不支持
SBE,你将收到一个406 不可接受的响应。 - 如果在
X-MBX-SBE报文头中提供的 XML 模式是属于格式错误或不正确的情况,那你得到的响应将会是一个SBE解码错误。 - 如果
X-MBX-SBE报文头缺失,那你得到的响应将会是一个SBE解码错误。
- 如果交易所不支持
- 如果你在
Accept报文头中同时提供了application/sbe和application/json:- 如果交易所不支持
SBE,那么响应将会被回退到JSON。 - 如果在
X-MBX-SBE报文头中提供的 XML 模式是属于格式错误或不正确的情况,那么响应将会被回退到JSON。 - 如果
X-MBX-SBE报文头缺失,那么响应将会被回退到JSON。
- 如果交易所不支持
WebSocket API
- 在请求的URL中添加
responseFormat=sbe。 - 添加schema ID 和 version 到参数
sbeSchemaId=<SCHEMA_ID>和sbeSchemaVersion=<SCHEMA_VERSION>。
样本请求 (WebSocket):
id=$(date +%s%3N)
method="exchangeInfo"
params='{"symbol":"BTCUSDT"}'
request=$( jq -n \
--arg id "$id" \
--arg method "$method" \
--argjson params "$params" \
'{id: $id, method: $method, params: $params}' )
response=$(echo $request | websocat -n1 'wss://ws-api.binance.com:443/ws-api/v3?responseFormat=sbe&sbeSchemaId=1&sbeSchemaVersion=0')
注意: