Python API 指南

如果你打算使用账户端点,请先获取你的 API 密钥:https://backpack.exchange/portfolio/settings/api-keys

安装所需的 Python 库:

  • cryptography – 用于 X-Signature(仅限账户端点

  • requests – 用于发起 HTTP 请求(如果你偏好异步方式,可使用 aiohttp)

pip3 install cryptography requests 

如果你打算使用账户端点,请安装 dotenv-python 以通过环境变量安全管理你的密钥。

pip3 install python-dotenv

创建一个a .env文件并像下面这样存储你的密钥:

PUBLIC_KEY=zDIJj9qneWIY0IYZ5aXoHcNMCm+XDhVcTssiT0HyY0A=
SECRET_KEY=4odxgSUxFrC/zsKWZF4OQwYAgnNu9hnWH3NxWfLAPz4=

创建一个 a .gitignore文件并添加 .env以将其排除在版本控制之外。

.env

以下所有示例中,我们将使用同步的 requests 库。首先导入它:

import requests

公共端点

对于公共端点,仅需发送一个 GET 请求。不需要 API 密钥。

举例:

# 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请求,你只需要查询字符串
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:
    ...
response status code: <Response [200]>
response json: [{'openInterest': '81420.17', 'symbol': 'SOL_USDC_PERP'}]
open interest: 81420.17

如果你有多个参数,使用 & 符号连接它们。

私有端点

对于私有端点,我们需要创建特定的请求头和请求体(对于 POST 请求)。

import base64  # 用于 base64 编码签名
from time import time  # 获取时间戳
import os  # 访问环境变量

from cryptography.hazmat.primitives.asymmetric import ed25519  #导入ed25519 以创建用于签名消息的私钥
# 在你的代码中使用以下内容:
# 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)
        )

获取充值地址: https://docs.backpack.exchange/#tag/Capital/operation/get_deposit_address

timestamp = int(time() * 1e3)  # 毫秒级 UNIX 时间戳
window: str = "5000"  # 请求有效的时间窗口(毫秒)

现在,X-Timestamp(时间戳)、X-Window(窗口)和 X-API-Key (公钥)都已准备就绪。接下来我们将创建 X-Signature:

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"&timestamp={timestamp}&window={window}" 

print(sign_str)

输出示例:

instruction=depositAddressQuery&blockchain=Solana&timestamp=1743731167786&window=5000

签名:

signature_bytes = private_key.sign(sign_str.encode())
encoded_signature = base64.b64encode(signature_bytes).decode()
print(f"signed query string: {encoded_signature}")

输出示例:

signed query string: lLc/zjqju853/hmCdb9dXtMhUijoetARooBn56hqbxPNXZTV9Gy1

创建请求头:

headers = {
    "X-API-Key": public_key,
    "X-Signature": encoded_signature,
    "X-Timestamp": str(timestamp),
    "X-Window": window,
    "Content-Type": "application/json; charset=utf-8",
}

发送请求:

url = ""
response = requests.get(url=url, headers=headers, params=params)
print(response.json())

输出示例:

{'address': '8PzpK8s8ezuSnXPjdPxR2FdZfzm5urkcUePrDL419PRC'}

注意:

对于 POST 请求,包含 JSON 请求体并使用 post() 方法。

POST 示例:

url_example = ""
response = (url=url, headers=headers, json=params)

SDK

SDK可大大简化开发流程!

示例:

https://github.com/sndmndss/bpx-py

Last updated