Bithumb API 数据查询指南
Bithumb 作为韩国领先的加密货币交易所之一,提供了强大的应用程序编程接口 (API),允许开发者和交易者访问市场数据、执行交易以及管理账户。本文旨在提供一个关于如何有效地使用 Bithumb API 查询数据的全面指南。
API 概览
Bithumb API 提供两种主要类型:公共 API 和私有 API。公共 API 无需身份验证即可访问,任何用户都可利用它获取实时的市场数据。这些数据包括但不限于:最新的交易价格、指定时间段内的交易量、以及当前的市场订单簿深度信息。通过公共 API,开发者可以构建应用程序,追踪市场趋势,或者进行数据分析,而无需创建账户或提供个人信息。
另一方面,私有 API 专为需要执行交易和管理账户的用户设计。访问私有 API 需要使用有效的 API 密钥进行身份验证。通过身份验证后,用户可以执行诸如下单、取消订单、查询账户余额、以及获取交易历史等操作。私有 API 提供了更高级的功能,允许用户与 Bithumb 交易所进行更深入的交互,但同时也需要更高的安全意识来保护 API 密钥,防止未经授权的访问和潜在的资金损失。
公共 API
公共 API 提供了以下关键功能,助力开发者构建强大的加密货币应用:
-
行情数据:
提供高精度的实时加密货币价格信息,包括但不限于:
- 最新成交价:反映当前市场交易的即时价格。
- 最高价:当日或指定时间段内的最高成交价格,用于评估市场波动上限。
- 最低价:当日或指定时间段内的最低成交价格,用于评估市场波动下限。
- 24小时交易量:过去24小时内的总交易量,反映市场活跃度。
- 开盘价:当日或指定时间段内的首次成交价格,作为参考基准。
- 加权平均价:根据成交量计算的平均价格,更能反映市场真实价值。
-
订单簿:
提供深度订单簿信息,展现买卖双方的挂单情况,详细信息包括:
- 买单(Bid)列表:按价格由高到低排列,显示买方愿意购买的价格和数量。
- 卖单(Ask)列表:按价格由低到高排列,显示卖方愿意出售的价格和数量。
- 订单价格:每笔订单的挂单价格。
- 订单数量:每笔订单的挂单数量,也称为委托量。
- 订单深度:不同价格区间的订单数量分布,用于分析市场支撑位和阻力位。
-
成交历史:
提供详细的加密货币成交历史记录,包括:
- 成交时间:每笔交易发生的具体时间戳。
- 成交价格:每笔交易的实际成交价格。
- 成交数量:每笔交易的成交数量。
- 买卖方向:指示该笔交易是买入还是卖出。
- 交易ID:唯一标识每笔交易的ID。
-
交易所信息:
提供交易所相关的必要信息,例如:
- 支持的加密货币列表:交易所允许交易的所有加密货币的列表。
- 交易手续费:不同交易类型所需支付的手续费率。
- 交易对:交易所支持的加密货币交易对,例如 BTC/USDT。
- 交易所API限制:API调用频率限制,防止滥用。
- 交易所公告:重要的交易所通知和更新。
私有 API
私有 API 提供了强大的功能,允许用户以编程方式访问和管理其加密货币账户。 这些 API 通常需要身份验证,以确保只有授权用户才能访问敏感信息和执行操作。
- 账户信息: 获取账户余额的实时快照,包括可用余额和已冻结余额。 详细查询交易历史,包括所有买入、卖出、充值和提现记录,并提供筛选和排序功能,以便更好地分析交易活动。查看完整的充值和提现记录,包括交易哈希、金额和时间戳,方便追踪资金流动。
- 下单: 创建限价买单或卖单,允许用户指定交易对、价格和数量。 创建市价单,以当前最佳市场价格立即执行交易。 高级订单类型,例如止损单和跟踪止损单,可以帮助用户管理风险和自动执行交易策略。
- 取消订单: 可以通过订单 ID 或指定交易对取消尚未完全成交的订单。 批量取消订单功能,允许用户一次性取消多个订单,提高操作效率。
- 查询订单状态: 通过订单 ID 或其他参数查询特定订单的详细状态,例如已完全成交、部分成交、未成交或已取消。 获取有关订单成交价格、数量和时间戳的详细信息。 查询历史订单,并按照时间范围、交易对或订单类型进行过滤。
- 提币: 将账户中的加密货币安全地转移到其他加密货币地址。 指定提币金额和目标地址,并可能需要进行双重身份验证以确保安全性。 查询提币请求的状态,包括已提交、处理中或已完成。 跟踪提币交易的交易哈希,以便在区块链上进行确认。
API 请求结构
Bithumb API 遵循 RESTful 架构原则,允许开发者通过标准的 HTTP 方法,如 GET、POST、PUT 和 DELETE,安全有效地访问和操作平台上的各种资源。一个典型的 API 请求由几个关键部分组成,确保请求的完整性和服务器的正确响应。
-
Endpoint (端点):
端点是 API 的具体 URL 地址,它标识了你想要访问的特定资源或功能。每个端点对应于不同的数据或操作。例如,
/public/ticker
用于获取指定交易对的实时行情数据,而/trade/place
则可能用于提交新的交易订单。选择正确的端点是构建 API 请求的第一步。 -
Parameters (参数):
参数是以查询字符串的形式附加到 URL 之后的键值对,用于向 API 传递额外的请求信息。这些参数可以用来过滤、排序、分页或指定特定的数据范围。例如,
currency=BTC_KRW
用于指定交易对为比特币/韩元,明确请求的范围。多个参数通常使用&
符号连接。 - Headers (头部): HTTP 头部包含关于请求本身的元数据,提供了客户端和服务器之间的附加信息。对于公开 API,头部可能包含客户端类型或内容格式等信息。对于私有 API 请求,头部则至关重要,它必须包含必要的身份验证信息,例如 API 密钥 (API Key) 和签名 (Signature)。这些信息用于验证请求者的身份,防止未经授权的访问。Bithumb 通常要求使用特定的算法生成签名,并将其添加到头部中,以确保请求的安全性。
- Body (正文): 请求正文包含了要发送给服务器的实际数据。通常用于 POST、PUT 和 DELETE 请求。例如,在提交新订单的 POST 请求中,请求正文必须包含订单的所有详细信息,如交易对、订单类型、价格、数量等。数据格式通常是 JSON,方便解析和处理。请求正文的格式和内容需要严格按照 API 文档的规定进行构造,否则会导致请求失败。
身份验证
访问 Bithumb 私有 API 接口需要进行严格的身份验证,以确保交易安全和数据完整性。身份验证的核心机制是使用 API 密钥和签名。API 密钥由两部分组成:API Key (Public Key) 和 Secret Key (Private Key)。API Key 用于标识您的账户,而 Secret Key 则用于生成签名。您可以在 Bithumb 官方网站的 API 管理页面生成和管理您的 API 密钥对。请务必妥善保管您的 Secret Key,切勿泄露给他人,因为拥有 Secret Key 即可模拟您的身份进行交易等操作。
签名是对请求参数和您的 Secret Key 进行加密计算后生成的字符串,其目的是验证请求的合法性,防止恶意篡改请求参数。服务器端会使用相同的算法对接收到的请求进行签名计算,并将计算结果与您提供的签名进行比对。如果两者一致,则认为请求是合法的,否则将拒绝请求。
以下是生成签名的基本步骤,更详细的信息请参考 Bithumb 官方API文档:
- 准备请求参数: 确定您需要发送的所有请求参数,包括 API 接口所需的参数和一些通用参数,例如 timestamp (时间戳)。务必保证参数值的准确性。
- 参数排序: 将所有请求参数按照字母顺序(ASCII码顺序)进行排序。这一步至关重要,因为签名的生成依赖于参数的顺序,错误的顺序会导致签名验证失败。
- 参数连接: 将排序后的参数按照 "key=value" 的格式连接成一个字符串。不同参数之间使用 "&" 符号分隔。例如:如果排序后的参数是 "amount=1ℴ_currency=BTC&payment_currency=KRW×tamp=1678886400",则连接后的字符串为 "amount=1ℴ_currency=BTC&payment_currency=KRW×tamp=1678886400"。
- 哈希计算: 使用您的 Secret Key 对连接后的字符串进行 SHA-512 哈希计算。SHA-512 是一种常用的加密哈希算法,可以将任意长度的字符串转换为固定长度的哈希值。在不同的编程语言中,SHA-512 哈希算法的实现方式可能略有不同,请参考相应的开发文档。
- 生成签名: 将计算出的 SHA-512 哈希值作为您的签名。该签名将作为请求头或请求参数的一部分发送给 Bithumb 服务器。
请务必注意以下几点:
- 时间戳: 许多 API 都要求包含时间戳参数,以防止重放攻击。时间戳通常是自 Unix 纪元(1970 年 1 月 1 日 00:00:00 UTC)以来的秒数或毫秒数。您需要确保时间戳的准确性,并与服务器的时间保持同步,否则签名验证可能会失败。
- 字符编码: 在进行参数连接和哈希计算时,请务必使用 UTF-8 字符编码。不同的字符编码可能会导致签名不一致。
- URL 编码: 如果请求参数中包含特殊字符(例如空格、"+"、"%" 等),则需要进行 URL 编码,以确保参数能够正确传递。
- 安全性: 切勿将您的 Secret Key 存储在客户端代码中,例如 JavaScript 代码。这会使您的 Secret Key 暴露给恶意用户。应该在服务器端生成签名,并仅将签名发送给客户端。
请注意,Bithumb API 的签名算法可能会随着版本更新而变化。因此,在开发过程中,请务必参考 Bithumb 官方 API 文档,以获取最新的签名算法和参数要求,确保您的代码能够正确地生成和验证签名。
示例代码
以下是一些使用 Python 语言调用 Bithumb API 的示例代码,旨在帮助开发者快速集成 Bithumb 交易所的数据和交易功能。这些示例涵盖了常见的API调用场景,例如获取市场行情、查询账户信息、以及进行交易操作。 为了安全起见,请务必在调用任何交易相关API之前,配置好您的API密钥并进行适当的权限设置。 我们强烈建议您在使用这些示例代码之前,详细阅读Bithumb官方API文档,了解每个API的参数要求、返回值格式以及相关的安全注意事项。请注意API调用频率限制,以避免被服务器拒绝服务。 示例代码仅供参考,实际应用中请根据您的具体需求进行修改和完善。
公共 API (获取 BTC/KRW 行情数据):
使用 Python 的
requests
库可以方便地访问 Bithumb 的公共 API,获取 BTC/KRW 交易对的实时行情数据。以下代码展示了如何发送 HTTP GET 请求并处理响应。
import requests
定义 API 端点 URL。此 URL 指向 Bithumb 交易所提供的 BTC/KRW 交易对的行情数据接口。
url = "https://api.bithumb.com/public/ticker/BTC_KRW"
使用
try...except
块处理可能出现的网络请求错误和 JSON 解码错误,保证程序的健壮性。
try:
发送 HTTP GET 请求到指定的 URL。
requests.get(url)
方法会返回一个
Response
对象,包含了服务器的响应信息。
response = requests.get(url)
检查 HTTP 响应状态码。
response.raise_for_status()
方法会在状态码不是 200 OK 的情况下抛出一个 HTTPError 异常,可以及时发现并处理网络请求错误。
response.raise_for_status() # 检查是否有 HTTP 错误
# 将响应内容解析为 JSON 格式。如果服务器返回的不是有效的 JSON 数据,会抛出一个 ValueError 异常。
data = response.()
# 打印解析后的 JSON 数据。可以查看 BTC/KRW 的实时价格、交易量等信息。
print(data)
except requests.exceptions.RequestException as e:
捕获所有
requests
库抛出的异常,例如网络连接错误、超时等。打印错误信息,方便调试。
print(f"请求失败: {e}")
except ValueError as e:
捕获 JSON 解码错误。如果 API 返回的不是有效的 JSON 格式,会导致解码失败。打印错误信息,便于排查问题。
print(f"JSON 解码失败: {e}")
私有 API (获取账户信息):
本示例展示了如何使用Python通过Bithumb交易所的私有API获取账户信息。访问私有API需要进行身份验证,包括使用Access Key、Secret Key和生成数字签名。以下代码片段提供了完整的流程。
导入必要的Python库,包括
requests
用于发送HTTP请求,
hashlib
用于生成安全哈希签名,
time
用于获取时间戳,以及
urllib.parse
用于编码URL参数。
import requests
import hashlib
import time
import urllib.parse
接下来,替换以下占位符为您的真实Access Key和Secret Key。 务必妥善保管您的密钥,切勿泄露 。API URL指向Bithumb的账户信息端点。
access_key = "YOUR_ACCESS_KEY" # 替换为您的 Access Key
secret_key = "YOUR_SECRET_KEY" # 替换为您的 Secret Key
api_url = "https://api.bithumb.com/info/account"
generate_signature
函数负责生成API请求的数字签名。该签名用于验证请求的真实性和完整性,防止篡改。签名的生成过程如下:
- 将Secret Key进行UTF-8编码。
- 拼接端点(endpoint)、空字符(chr(0))、编码后的参数(encoded_params)、空字符(chr(0))和当前时间戳。
- 将拼接后的字符串进行UTF-8编码。
- 使用SHA512算法对编码后的字符串进行哈希运算,并返回十六进制表示的哈希值。
def generate_signature(endpoint, encoded_params, secret_key):
secret_key_encoded = secret_key.encode('utf-8')
string_to_sign = endpoint + chr(0) + encoded_params + chr(0) + str(time.time())
string_to_sign_encoded = string_to_sign.encode('utf-8')
signature = hashlib.sha512(string_to_sign_encoded).hexdigest()
return signature
定义请求参数。在本例中,我们查询KRW(韩元)账户的信息。您可以根据需要修改
currency
参数查询其他币种的信息。
params = {
"currency": "KRW" # 查询 KRW 账户信息
}
设置API端点和编码请求参数,然后调用
generate_signature
函数生成签名。
endpoint = "/info/account"
encoded_params = urllib.parse.urlencode(params)
signature = generate_signature(endpoint, encoded_params, secret_key)
构建HTTP请求头部,包括
Api-Key
(您的Access Key)、
Api-Signature
(生成的签名)、
Api-Timestamp
(当前时间戳)和
Content-Type
。
Content-Type
设置为
application/x-www-form-urlencoded
,表示请求体使用URL编码格式。
headers = {
"Api-Key": access_key,
"Api-Signature": signature,
"Api-Timestamp": str(time.time()),
"Content-Type": "application/x-www-form-urlencoded"
}
使用
requests.post
方法发送POST请求到API端点。将
headers
和
params
作为参数传递。使用
try...except
块处理可能发生的异常,例如网络错误或JSON解码错误。
response.raise_for_status()
会在响应状态码表示错误时抛出异常.
try:
response = requests.post(api_url, headers=headers, data=params)
response.raise_for_status()
data = response.()
print(data)
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
except ValueError as e:
print(f"JSON 解码失败: {e}")
如果请求成功,将响应内容解析为JSON格式,并打印到控制台。JSON数据包含您的账户信息,例如可用余额、冻结余额等。
重要提示: 在实际使用中,请务必替换示例代码中的YOUR_ACCESS_KEY
和 YOUR_SECRET_KEY
为您自己的 API 密钥。此外,务必妥善保管您的 API 密钥,避免泄露。
错误处理
Bithumb API 会返回多种类型的错误代码,精确地指示请求失败的具体原因。开发者应充分理解这些错误代码,以便构建健壮且可靠的应用程序。常见的错误代码及其详细说明如下:
-
5000
: 请求参数无效。这通常意味着API请求中包含错误、缺失或格式不正确的参数。仔细检查请求参数的名称、类型和值,确保它们符合Bithumb API的规范。例如,可能是缺少了必填参数,或者参数的值超出了允许的范围。 -
5100
: 身份验证失败。此错误表明提供的API密钥或签名不正确。请确保API密钥已正确配置,并且用于生成签名的密钥是有效的。同时,仔细核对签名算法和参数,确保签名计算过程与Bithumb API的要求完全一致。时间戳的偏差也可能导致签名验证失败,需要同步服务器时间。 -
5200
: 余额不足。当尝试进行交易操作(如买入或卖出)时,如果账户中可用余额不足以支付交易所需的资金,则会返回此错误。检查账户余额,并确保有足够的资金用于执行交易。考虑取消挂单释放冻结的资金。 -
5300
: 订单不存在。尝试取消或查询不存在的订单时,会返回此错误。验证订单ID是否正确,并确认该订单确实存在于Bithumb系统中。订单可能已经被执行或取消。
编写Bithumb API客户端时,必须对可能出现的错误代码进行全面而细致的处理。通过捕获并分析错误代码,可以及时发现并解决潜在的问题,从而提高应用程序的稳定性和可靠性。建议使用try-except(或其他语言的等效机制)块来处理API调用,并记录错误日志,以便进行调试和故障排除。根据不同的错误类型采取相应的措施,例如,重新发送请求、通知用户或停止交易操作。考虑实施重试机制,以处理由于网络问题导致的暂时性错误。
频率限制
Bithumb API 为了保障系统的稳定性和可用性,实施了严格的频率限制策略,旨在防止恶意攻击和滥用行为。API 客户端必须遵守这些限制,否则可能会受到处罚,例如临时或永久阻止访问。
当您的请求频率超过 Bithumb API 设定的上限时,服务器将返回 HTTP 状态码
429 Too Many Requests
,表明您已经触发了频率限制。为了避免这种情况,开发者需要仔细规划 API 请求,避免不必要的重复请求,并合理地利用缓存机制。
为了帮助开发者更好地管理 API 请求,Bithumb API 在 HTTP 响应头部中提供了以下关键信息:
-
X-RateLimit-Remaining
:该字段指示在当前时间窗口内,您还可以发送的剩余请求数量。通过监控此值,您可以及时调整请求频率,避免触及限制。 -
X-RateLimit-Reset
:该字段表示当前时间窗口重置的 Unix 时间戳。您可以根据此时间戳计算出距离下一个时间窗口开始的剩余时间,以便在限制解除后恢复请求。
开发者应仔细阅读 Bithumb API 的官方文档,了解具体的频率限制规则,包括不同 API 端点的限制、时间窗口的大小等。根据这些信息,您可以设计出更加健壮和高效的 API 客户端,确保应用程序的稳定运行。
还可以考虑使用以下策略来优化 API 请求:
- 批量请求: 对于支持批量操作的 API 端点,尽量将多个请求合并为一个请求,减少网络开销和服务器压力。
- 缓存数据: 将经常访问且不经常变化的数据缓存到本地,避免频繁地从 API 获取数据。
- 使用 WebSocket: 对于需要实时更新的数据,可以考虑使用 WebSocket 连接,减少 HTTP 请求的开销。
-
指数退避:
当遇到
429
错误时,不要立即重试,而是采用指数退避策略,逐渐增加重试的间隔,避免对服务器造成更大的压力。
通过理解和遵守 Bithumb API 的频率限制,并采取相应的优化策略,开发者可以构建出更加稳定、高效和可靠的加密货币应用程序。
注意事项
- 安全: 为了保护您的资产和数据安全,务必采取严格的安全措施来保管您的 Bithumb API 密钥。 API 密钥应被视为高度敏感的凭证,如同您的银行账户密码。 不要将 API 密钥存储在公共代码仓库、客户端应用程序或任何不安全的位置。 强烈建议使用环境变量或专门的密钥管理服务来安全地存储和访问 API 密钥。 定期轮换您的 API 密钥也是一种良好的安全实践,以降低密钥泄露的风险。 如果您的 API 密钥被泄露,请立即撤销旧密钥并生成新的密钥。
- 文档: Bithumb 官方 API 文档是您使用 API 的权威指南。 API 会不断更新和改进,新的接口、参数和功能会不断推出。 因此,建议您定期查阅 Bithumb 官方 API 文档,以了解最新的 API 接口和参数变化。 及时了解 API 的最新动态,可以帮助您更好地利用 API,并避免因 API 更新而导致应用程序出现问题。 文档通常包含详细的 API 调用示例、参数说明、错误代码解释等信息,是您开发和调试 API 应用程序的重要参考资料。
- 测试: 在将您的 API 应用程序部署到正式环境之前,请务必先在测试环境中进行充分的测试。 Bithumb 通常提供一个测试环境,允许您在不涉及真实资金的情况下模拟 API 调用。 通过在测试环境中进行测试,您可以验证您的代码是否正确地调用 API、处理 API 返回的数据、以及处理各种可能的错误情况。 这有助于您在正式环境中避免因代码错误或 API 使用不当而造成的损失。 请确保您的测试覆盖各种场景,包括正常情况和异常情况,以确保您的应用程序的稳定性和可靠性。
- 错误处理: API 调用过程中可能会出现各种错误,例如网络连接错误、参数错误、权限错误等。 Bithumb API 会返回相应的错误代码和错误信息,以便您了解错误的类型和原因。 您需要在您的应用程序中对 API 返回的错误代码进行适当的处理,以便及时发现和解决问题。 良好的错误处理机制可以帮助您提高应用程序的健壮性,并为用户提供更好的体验。 例如,您可以记录错误日志、向用户显示友好的错误提示、或自动重试 API 调用。
- 频率限制: 为了保护 API 的稳定性和可用性,Bithumb API 通常会对 API 调用频率进行限制。 每个 API 接口都有其特定的频率限制,超过频率限制的 API 调用可能会被拒绝。 您需要在您的应用程序中遵守 API 的频率限制,避免被限制访问。 可以通过缓存 API 返回的数据、优化 API 调用逻辑、或使用异步 API 调用等方式来降低 API 调用频率。 如果您的应用程序需要更高的 API 调用频率,您可以考虑申请更高的频率限制。
- 数据格式: Bithumb API 返回的数据通常采用 JSON 格式。 JSON 是一种轻量级的数据交换格式,易于阅读和解析。 您需要了解 API 返回的数据格式,以便正确解析数据。 您可以使用各种编程语言提供的 JSON 解析库来解析 API 返回的数据。 请注意,API 返回的数据格式可能会随着 API 的更新而发生变化。 因此,您需要定期查阅 API 文档,以了解最新的数据格式。 正确解析 API 返回的数据是您构建 API 应用程序的基础。
通过严格遵循这些指南,您可以更安全、高效地使用 Bithumb API 查询实时市场数据,执行交易操作,并构建强大的加密货币交易应用程序,从而在快速发展的加密货币市场中获得竞争优势。 深入理解并遵守这些最佳实践是成功利用 Bithumb API 的关键。