如果你打算使用账户端点,请先获取你的 API 密钥:
安装所需的 Python 库:
cryptography – 用于 X-Signature(仅限 )
requests – 用于发起 HTTP 请求(如果你偏好异步方式,可使用 aiohttp)
Copy pip3 install cryptography requests
如果你打算使用 ,请安装 dotenv-python 以通过环境变量安全管理你的密钥。
Copy pip3 install python-dotenv
创建一个a .env
文件并像下面这样存储你的密钥:
Copy PUBLIC_KEY=zDIJj9qneWIY0IYZ5aXoHcNMCm+XDhVcTssiT0HyY0A=
SECRET_KEY=4odxgSUxFrC/zsKWZF4OQwYAgnNu9hnWH3NxWfLAPz4=
创建一个 a .gitignore
文件并添加 .env
以将其排除在版本控制之外。
以下所有示例中,我们将使用同步的 requests
库。首先导入它:
公共端点
对于公共端点,仅需发送一个 GET
请求。不需要 API 密钥。
举例:
Copy # https://docs.backpack.exchange/#tag/Markets/operation/get_open_interest
BASE_URL: str = "" # 所有请求的基础 API 地址
symbol: str = "SOL_USDC_PERP" # 指定交易对
result_url: str = f"{BASE_URL}api/v1/openInterest?symbol={symbol}" # 将参数作为查询字符串添加。对于GET请求,你只需要查询字符串
Copy from json import JSONDecodeError
response = requests.get(url=result_url) # 发起 GET 请求
print(f"response status code: {response}")
if response.status_code == 200:
# 为防止接收到意外数据,确保代码安全
try:
print(f"response json: {response.json()}")
open_interest: str = response.json()[0]["openInterest"]
print(f"open interest: {open_interest}")
except JSONDecodeError:
print(f"如果响应不是 JSON 的内容: {response.text}")
else:
...
Copy response status code: <Response [200]>
response json: [{'openInterest': '81420.17', 'symbol': 'SOL_USDC_PERP'}]
open interest: 81420.17
如果你有多个参数,使用 &
符号连接它们。
私有端点
对于私有端点,我们需要创建特定的请求头和请求体(对于 POST
请求)。
Copy import base64 # 用于 base64 编码签名
from time import time # 获取时间戳
import os # 访问环境变量
from cryptography.hazmat.primitives.asymmetric import ed25519 #导入ed25519 以创建用于签名消息的私钥
Copy # 在你的代码中使用以下内容:
# from dotenv import load_dotenv, find_dotenv
# load_dotenv(find_dotenv())
# public_key: str = os.getenv("PUBLIC_KEY")
# secret_key: str = os.getenv("SECRET_KEY")
public_key: str = "zDIJj9qneWIY0IYZ5aXoHcNMCm+XDhVcTssiT0HyY0A=" # 不安全示例
secret_key: str = "4odxgSUxFrC/zsKWZF4OQwYAgnNu9hnWH3NxWfLAPz4=" # 不安全示例
private_key = ed25519.Ed25519PrivateKey.from_private_bytes(
base64.b64decode(secret_key)
)
Copy timestamp = int(time() * 1e3) # 毫秒级 UNIX 时间戳
window: str = "5000" # 请求有效的时间窗口(毫秒)
现在,X-Timestamp(时间戳)、X-Window(窗口)和 X-API-Key (公钥)都已准备就绪。接下来我们将创建 X-Signature:
Copy instruction: str = "depositAddressQuery"
sign_str = f"instruction={instruction}"
# 此端点要求带上 "blockchain" 参数
params: dict = {
"blockchain": "Solana",
}
# 通用代码:根据任意参数生成有效的查询字符串
sorted_params_list = []
for key, value in sorted(params.items()):
if isinstance(value, bool): # 布尔值需转小写
value = str(value).lower()
sorted_params_list.append(f"{key}={value}")
sorted_params = "&".join(sorted_params_list)
if sorted_params:
sign_str += "&" + sorted_params
sign_str += f"×tamp={timestamp}&window={window}"
print(sign_str)
输出示例:
Copy instruction=depositAddressQuery&blockchain=Solana×tamp=1743731167786&window=5000
签名:
Copy signature_bytes = private_key.sign(sign_str.encode())
encoded_signature = base64.b64encode(signature_bytes).decode()
print(f"signed query string: {encoded_signature}")
输出示例:
Copy signed query string: lLc/zjqju853/hmCdb9dXtMhUijoetARooBn56hqbxPNXZTV9Gy1
创建请求头:
Copy headers = {
"X-API-Key": public_key,
"X-Signature": encoded_signature,
"X-Timestamp": str(timestamp),
"X-Window": window,
"Content-Type": "application/json; charset=utf-8",
}
发送请求:
Copy url = ""
response = requests.get(url=url, headers=headers, params=params)
print(response.json())
输出示例:
Copy {'address': '8PzpK8s8ezuSnXPjdPxR2FdZfzm5urkcUePrDL419PRC'}
注意:
对于 POST
请求,包含 JSON
请求体并使用 post()
方法。
POST 示例:
Copy url_example = ""
response = (url=url, headers=headers, json=params)
SDK
SDK可大大简化开发流程!
示例: