BigONE API 查询指南
BigONE 提供了一套全面的 API,允许开发者以编程方式访问市场数据、管理账户和执行交易。 这份指南将详细介绍 BigONE API 的主要功能、使用方法和一些注意事项。
API 概述
BigONE API 采用 RESTful 架构设计,支持使用标准的 HTTP 方法(如 GET、POST、PUT、DELETE)进行资源操作。 数据交换格式统一为 JSON (JavaScript Object Notation),易于解析和处理,方便开发者集成。 API 分为两大类:公共接口和私有接口。
公共接口 允许匿名访问,无需任何身份验证。 此类接口主要用于获取市场数据,例如:实时行情、历史交易记录、订单簿深度、K线数据等。 这些数据对于市场分析、策略制定和数据可视化至关重要。 由于无需授权,公共接口的访问频率可能会受到限制,以防止滥用。
私有接口 则需要 API 密钥进行身份验证。API 密钥由一对 key 和 secret 组成。 Key 用于标识用户,secret 用于生成数字签名,验证请求的合法性。 私有接口用于管理用户的账户和执行交易,包括:查询账户余额、下单、撤单、查询订单状态、获取交易历史等。 为了保障用户资产安全,强烈建议开启二次验证(2FA)并妥善保管 API 密钥。泄露 API 密钥可能导致账户资产被盗。 通过私有 API 进行的所有操作都会被记录,以便于审计和追踪。
身份验证
为确保安全访问BigONE私有API,您需要创建并使用API密钥。密钥的创建和管理均可在您的BigONE账户的API管理页面完成。成功生成密钥后,您将获得API Key和Secret Key两部分关键信息。
- API Key: 此密钥用于唯一标识您的应用程序,类似于您的应用程序的用户名。BigONE 使用此密钥来跟踪和管理API的使用情况。
- Secret Key: 此密钥极其重要,用于对您的API请求进行数字签名,以验证请求的真实性和完整性。请务必妥善保管,切勿泄露。
每个API请求的头部都必须包含
Authorization
字段,其值应设置为
Bearer
。例如:
Authorization: Bearer YOUR_API_KEY
。此字段告知服务器您的应用程序的身份。
除了身份验证之外,为了防止恶意篡改,请求体需要进行签名。以下是详细的签名算法:
- 构建签名字符串: 将HTTP请求方法(如GET、POST、PUT、DELETE等,务必转换为大写)、完整的请求路径(包括起始斜杠“/”)、经过URL编码的查询参数(按照参数名称的字母顺序排序)以及请求体(如果存在)按照顺序连接成一个统一的字符串。
- 计算 HMAC-SHA256 签名: 使用您的Secret Key作为密钥,对构建好的签名字符串进行HMAC-SHA256加密计算,生成一个哈希值。HMAC-SHA256是一种消息认证码算法,它可以验证数据的完整性以及来源的可靠性。
-
将签名添加到请求头:
将计算得到的签名值添加到名为
X-BIGONE-SIGNATURE
的请求头中。例如:X-BIGONE-SIGNATURE: YOUR_GENERATED_SIGNATURE
。
以下是一个Python代码示例,演示了如何计算签名,方便您在应用程序中集成:
import hashlib
import hmac
import urllib.parse
import
def generate_signature(secret_key, method, path, query_params=None, body=None):
"""
生成 BigONE API 请求的签名。
"""
message = method.upper() + path
if query_params:
sorted_params = sorted(query_params.items())
query_string = urllib.parse.urlencode(sorted_params)
message += "?" + query_string
if body:
if isinstance(body, dict):
body_string = .dumps(body, separators=(',', ':'), sort_keys=True)
else:
body_string = str(body)
message += body_string
hmac_obj = hmac.new(secret_key.encode('utf-8'), message.encode('utf-8'), hashlib.sha256)
signature = hmac_obj.hexdigest()
return signature
公共 API
公共 API 提供强大的数据访问功能,允许开发者便捷地获取市场信息,构建各种交易应用和分析工具。
- 获取市场行情: 您可以实时获取指定交易对的关键行情数据,包括但不限于最新成交价格、24小时成交量、当日最高价、当日最低价、开盘价、收盘价以及加权平均价等。这些数据对于监控市场动态和制定交易策略至关重要。
- 获取交易对信息: 您可以查询所有交易对的详细配置信息,这些信息定义了交易规则和参数。详细信息包括交易对名称(如BTC/USDT)、基础货币(如BTC)、报价货币(如USDT)、价格精度(小数点后位数,影响挂单价格)、数量精度(最小交易单位,影响交易数量)、交易对状态(如正常交易、维护中)以及手续费率等。
- 获取 K 线数据: 您可以获取指定交易对的历史 K 线数据,用于技术分析和图表绘制。支持的时间周期非常灵活,包括但不限于1分钟、5分钟、15分钟、30分钟、1小时、4小时、12小时、1天、1周、1月等。每根 K 线包含开盘价、最高价、最低价、收盘价和成交量等关键信息。
- 获取深度数据: 您可以获取指定交易对的实时深度数据,也称为订单簿数据。深度数据展示了当前市场上买单和卖单的价格和数量分布情况,有助于了解市场的买卖力量对比,为交易决策提供依据。数据通常包含多个档位的买一价、买一量、卖一价、卖一量等信息。
- 获取最新成交记录: 您可以获取指定交易对的实时成交记录,包括成交时间、成交价格、成交数量以及买卖方向等。通过分析成交记录,可以追踪市场上的交易活动,识别潜在的趋势和价格异动。
示例:获取 BTC/USDT 的市场行情
通过发送 GET 请求至
/api/v3/markets/BTC-USDT
接口,您可以获取比特币(BTC)与泰达币(USDT)交易对的实时市场数据。
请求方法:GET
请求路径:
/api/v3/markets/BTC-USDT
响应示例:
以下 JSON 格式的响应包含了 BTC/USDT 交易对的关键市场指标:
{
"data": {
"id": "BTC-USDT",
"type": "market",
"attributes": {
"latest_trade_price": "27000.00",
"volume_24h": "100.00",
"high_24h": "27500.00",
"low_24h": "26500.00",
"change_24h": "0.05"
},
"relationships": {
"asset": {
"data": {
"id": "BTC",
"type": "asset"
}
},
"quote_asset": {
"data": {
"id": "USDT",
"type": "asset"
}
}
}
}
}
字段解释:
-
data.id
: 市场 ID,例如 "BTC-USDT"。 -
data.type
: 对象类型,这里是 "market"。 -
data.attributes.latest_trade_price
: 最新成交价格。 -
data.attributes.volume_24h
: 24 小时成交量。 -
data.attributes.high_24h
: 24 小时最高价。 -
data.attributes.low_24h
: 24 小时最低价。 -
data.attributes.change_24h
: 24 小时价格变动百分比(例如 0.05 表示 5% 的涨幅)。 -
data.relationships.asset.data.id
: 基础资产 ID,这里是 "BTC"。 -
data.relationships.asset.data.type
: 基础资产类型,这里是 "asset"。 -
data.relationships.quote_asset.data.id
: 计价资产 ID,这里是 "USDT"。 -
data.relationships.quote_asset.data.type
: 计价资产类型,这里是 "asset"。
此接口返回的数据可以用于实时监控市场价格,计算收益和风险,以及进行其他交易决策。
私有 API
私有 API 提供一系列交易和账户管理功能,允许用户通过编程方式访问和操作其加密货币账户。这些功能包括:
- 获取账户信息: 您可以获取账户的全面信息,例如总余额、可用余额、冻结余额,以及各种币种的持有量。这些数据对于监控账户价值和制定交易策略至关重要。
- 下单: 您可以根据市场情况创建不同类型的订单,包括限价单(指定价格成交)、市价单(按当前市场价格立即成交)。更高级的订单类型,如止损单、止盈单也可能被支持,用于风险管理和自动化交易。下单时需指定交易对、数量和价格(如果适用)。
- 撤单: 您可以取消任何尚未完全成交的挂单。这允许您在市场条件发生变化时灵活调整您的交易策略,避免不必要的损失。撤单操作会释放被冻结的资金。
- 获取订单信息: 您可以查询单个订单的详细信息,例如订单状态(已挂单、部分成交、完全成交、已撤销)、下单价格、下单数量、已成交数量、剩余未成交数量、下单时间、订单类型(限价单、市价单等)以及其他相关的订单参数。这些信息有助于追踪订单的执行情况。
- 获取历史订单: 您可以获取账户的历史订单记录,用于分析交易表现、复盘交易策略以及进行税务申报。历史订单记录通常包含订单的所有相关信息,包括成交价格、成交时间、手续费等。
- 获取充提币记录: 您可以查询加密货币的充值和提现记录,包括充值/提现的币种、数量、交易哈希、状态(成功、待确认、失败)以及相关的时间戳。这些记录对于追踪资金流动和验证交易至关重要。
示例:下单 (限价单)
POST /api/v3/orders
该接口用于提交限价单,允许用户以指定价格买入或卖出加密资产。限价单只有在市场价格达到或优于指定价格时才会成交。用户可以通过设置合适的买入价或卖出价来控制交易成本。
请求体示例:
以下 JSON 格式展示了一个创建 BTC-USDT 交易对限价买单的请求示例。务必注意字段的大小写及数据类型,错误的参数可能导致请求失败。
{
"side": "buy",
"type": "limit",
"price": "26000.00",
"amount": "0.01",
"asset_pair_name": "BTC-USDT"
}
参数说明:
-
side
: 订单方向,可选值为 "buy" (买入) 或 "sell" (卖出)。 -
type
: 订单类型,此处为 "limit" (限价单)。 -
price
: 限价单价格,即期望的成交价格。 -
amount
: 订单数量,即买入或卖出的资产数量。 -
asset_pair_name
: 交易对名称,如 "BTC-USDT"。
响应示例:
服务器成功接收并处理订单后,会返回包含订单详细信息的 JSON 响应。注意,这并不意味着订单立即成交,仅表示订单已成功提交到交易系统。订单的具体成交情况取决于市场行情和订单深度。
{
"data": {
"id": "order_id123",
"type": "order",
"attributes": {
"side": "buy",
"type": "limit",
"price": "26000.00",
"amount": "0.01",
"filled_amount": "0.00",
"remaining_amount": "0.01",
"status": "open"
},
"relationships": {
"asset_pair": {
"data": {
"id": "BTC-USDT",
"type": "asset_pair"
}
}
}
}
}
响应字段说明:
-
id
: 订单 ID,用于唯一标识该订单。 -
type
: 资源类型,此处为 "order"。 -
attributes
: 订单属性,包含订单的详细信息。-
side
: 订单方向,同请求参数。 -
type
: 订单类型,同请求参数。 -
price
: 限价单价格,同请求参数。 -
amount
: 订单数量,同请求参数。 -
filled_amount
: 已成交数量。 -
remaining_amount
: 剩余未成交数量。 -
status
: 订单状态,可能的值包括 "open" (未成交)、"partially_filled" (部分成交)、"filled" (完全成交)、"canceled" (已取消) 等。
-
-
relationships
: 订单与其他资源的关系,此处表示订单与交易对的关系。-
asset_pair
: 交易对信息。-
id
: 交易对 ID,如 "BTC-USDT"。 -
type
: 资源类型,此处为 "asset_pair"。
-
-
速率限制
BigONE API 实施了速率限制机制,旨在防止恶意滥用行为,保障所有用户的公平稳定访问体验。速率限制主要依据两个维度进行控制:用户的 IP 地址以及所使用的 API 密钥。当您的请求频率超过预设的速率限制阈值时,API 将返回一个 HTTP 状态码 429 错误,表明请求被暂时阻止。
为确保您的应用程序能够正常运行,强烈建议您认真研读 BigONE API 官方文档中关于速率限制的详细说明,充分了解各项限制的具体参数与规则,并据此制定相应的应对策略,以有效避免超出限制的情况发生。例如,您可以考虑采用指数退避(Exponential Backoff)策略。该策略的核心思想是在收到 HTTP 429 错误后,不是立即重试请求,而是等待一段逐渐增加的时间间隔后再进行重试。具体来说,可以设置一个初始等待时间,并在每次收到 429 错误后,将等待时间乘以一个大于 1 的因子(如 2 或 3)。还可以设置一个最大等待时间,以避免等待时间过长。 通过实施指数退避策略,可以有效降低服务器的压力,提高请求成功的可能性,并最终提升应用程序的稳定性和可靠性。同时,优化您的代码,减少不必要的 API 调用,也能有效降低触发速率限制的风险。
错误处理
BigONE API 使用标准的 HTTP 状态码来指示请求的结果。这些状态码允许开发者快速识别请求是否成功,以及在失败时确定失败原因。 常见状态码包括:
- 200 OK: 请求成功。服务器已成功处理请求并返回了所需的数据。
- 400 Bad Request: 请求无效。这表示客户端发送的请求存在问题,服务器无法理解。通常是由于请求参数错误(例如,参数格式不正确、参数值超出范围)或缺少必要参数导致的。仔细检查请求参数的拼写、类型和范围。
- 401 Unauthorized: 未授权。表明客户端尝试访问受保护的资源,但未提供有效的身份验证凭据。 通常是由于 API 密钥无效、过期或者根本没有提供 API 密钥导致的。请确保您的 API 密钥正确无误,并且已经正确配置。
- 403 Forbidden: 禁止访问。表示服务器理解请求,但拒绝执行。这通常是因为客户端的 API 密钥没有访问指定资源的权限,或者客户端的 IP 地址被服务器阻止。检查API密钥的权限设置,确认其具有访问目标资源的权限。
- 404 Not Found: 找不到资源。服务器无法找到与请求 URI 相匹配的资源。这可能是由于URI拼写错误或者请求的资源确实不存在。请仔细检查URI是否正确。
- 429 Too Many Requests: 超出速率限制。客户端在给定的时间内发送了过多的请求。为避免此错误,您需要实施速率限制策略,例如使用指数退避算法来减缓请求频率。 请查看BigONE API的速率限制文档,了解具体的限制规则。
- 500 Internal Server Error: 服务器内部错误。这表示服务器遇到了一个意外的错误,无法完成请求。这通常是服务器端的问题,客户端无法直接解决。如果经常遇到此错误,请联系BigONE技术支持。
当请求失败时,响应体通常包含一个 JSON 对象,其中包含错误的详细信息。JSON对象通常包含错误代码、错误消息和错误的详细描述。 建议您仔细阅读错误信息,以便诊断和解决问题。错误信息能够帮助您快速定位问题所在,并采取相应的措施进行修复。
Websocket API
除了 REST API,BigONE 还提供 Websocket API,用于实时、高效地推送市场数据和用户订单更新。Websocket API 允许开发者和交易者订阅特定交易对的市场行情(例如:最新价格、24小时涨跌幅)、深度数据(买单和卖单的价格和数量分布)、最新成交记录以及用户账户的订单更新状态,包括订单创建、成交、取消等事件。
Websocket API 的主要优势在于其能够实现数据的实时推送,无需客户端(例如交易应用程序或分析工具)频繁地通过轮询 REST API 来获取最新数据。这种实时性可以显著降低数据延迟,从而提高应用程序的响应速度和用户体验,对于高频交易和实时监控至关重要。传统的REST API依赖于客户端发起请求,服务器响应,而Websocket则允许服务器主动推送数据,减少了不必要的网络开销。
为了使用 Websocket API,用户需要首先建立一个持久的 Websocket 连接,然后通过发送订阅消息来指定感兴趣的数据类型和交易对。订阅消息通常采用JSON格式,包含必要的参数,如数据类型(例如:ticker、depth、trades、orders)和交易对名称(例如:BTC/USDT)。服务器在接收到订阅消息后,会实时推送相关数据到客户端,直到连接断开或取消订阅。
最佳实践
- 妥善保管 API 密钥: API 密钥是访问 BigONE 账户的凭证,拥有高度的敏感性。将其视为银行密码,切勿以任何形式泄露给任何第三方,包括通过邮件、聊天或公开的代码仓库。建议使用环境变量或加密存储来管理 API 密钥,避免硬编码在应用程序中。定期轮换 API 密钥是一种良好的安全实践,可以降低密钥泄露带来的风险。
- 使用安全连接: 始终使用 HTTPS(TLS/SSL)协议发起 API 请求,这是确保数据在客户端和 BigONE 服务器之间安全传输的关键。HTTPS 对数据进行加密,防止中间人攻击和数据窃听。确认 API 端点以 `https://` 开头,并在代码中强制执行 HTTPS 连接。禁用不安全的 HTTP 连接,避免潜在的安全漏洞。
- 处理错误: 编写健壮且全面的错误处理代码,对来自 BigONE API 的各种错误响应进行有效处理。错误处理应包括记录错误日志、向用户提供友好的错误信息以及采取适当的补救措施。根据不同的错误代码采取不同的应对策略,例如,针对速率限制错误进行重试,针对身份验证错误提醒用户检查 API 密钥。避免程序因未处理的错误而崩溃,保证程序的稳定性和可用性。
- 实施速率限制: 深入理解 BigONE API 的速率限制机制,并采取相应的策略以避免超出限制。超出速率限制可能导致 API 请求被拒绝,影响应用程序的正常运行。可以使用缓存机制来减少对 API 的请求频率,或者实施队列机制来平滑 API 请求。在代码中加入速率限制处理逻辑,例如,使用指数退避算法进行重试。监控 API 请求的速率,及时发现并解决速率限制问题。
- 阅读 API 文档: 在使用 BigONE API 之前,务必仔细阅读并充分理解官方 API 文档。文档提供了关于 API 端点、请求参数、响应格式、认证机制、错误代码以及最佳实践的详细信息。掌握 API 文档是正确使用 API 的基础,可以避免许多常见的错误。定期查阅文档更新,了解 API 的最新功能和变更。参考官方提供的示例代码,可以帮助您更快地入门。
常见问题
- 如何获取 API 密钥? 您可以在 BigONE 账户的 API 管理页面 生成 API 密钥。API 密钥是访问 BigONE API 的必要凭证,请妥善保管。请注意,不同类型的 API 密钥可能对应不同的访问级别和频率限制。
- API 密钥的权限有哪些? API 密钥可以具有不同的权限,例如只读权限(获取市场数据和账户信息)、交易权限(下单、取消订单等)、提现权限(发起提现请求)等。您可以在生成 API 密钥时,根据您的应用需求选择所需的权限。建议遵循最小权限原则,仅赋予 API 密钥必要的权限,以降低安全风险。开启提现权限需要进行额外的安全验证。
- 如何撤销 API 密钥? 您可以在 BigONE 账户的 API 管理页面撤销 API 密钥。撤销 API 密钥后,该密钥将立即失效,任何使用该密钥发起的 API 请求都将被拒绝。建议定期检查和清理不再使用的 API 密钥,以保障账户安全。在密钥泄露的情况下,请立即撤销该密钥并重新生成新的密钥。
- API 接口返回 403 错误怎么办? HTTP 403 错误表示“禁止访问”。请检查您的 API 密钥是否具有访问指定资源的权限。例如,您可能尝试访问需要交易权限的 API 接口,但您的 API 密钥只有只读权限。还需确认您的 API 密钥是否已被禁用。如果确认权限配置正确且密钥未被禁用,请检查您的请求是否符合 API 文档中的要求,例如请求参数是否正确、请求频率是否超过限制等。
- 如何联系 BigONE API 技术支持? 您可以访问 BigONE 官方网站 ,查找技术支持的联系方式。技术支持团队可以帮助您解决 API 使用过程中遇到的各种问题,例如 API 接口的详细说明、错误代码的解释、API 使用案例等。在联系技术支持时,请提供详细的错误信息、您的 API 密钥以及相关的请求参数,以便技术支持团队能够更快地定位问题。