Hướng dẫn sử dụng API Python của Backpack Exchange
Lấy API key nếu bạn muốn sử dụng các endpoint liên quan đến tài khoản: https://backpack.exchange/portfolio/settings/api-keys
Cài đặt các thư viện Python cần thiết:
cryptography – dùng để tạo X-Signature (chỉ áp dụng cho các endpoint tài khoản)
requests – để thực hiện các yêu cầu HTTP (hoặc aiohttp nếu bạn thích làm việc bất đồng bộ)
pip3 install cryptography requests
Nếu bạn dự định sử dụng các endpoint tài khoản, nên cài thêm thư viện dotenv-python để quản lý khóa API an toàn bằng biến môi trường
pip3 install python-dotenv
Tạo file .env và lưu trữ các khóa API như sau
PUBLIC_KEY=zDIJj9qneWIY0IYZ5aXoHcNMCm+XDhVcTssiT0HyY0A=
SECRET_KEY=4odxgSUxFrC/zsKWZF4OQwYAgnNu9hnWH3NxWfLAPz4=
Tạo file .gitignore và thêm .env vào để loại trừ file này khỏi hệ thống quản lý phiên bản.
.env
Trong tất cả ví dụ, chúng ta sẽ sử dụng thư viện requests (đồng bộ). Hãy import nó trước:
import requests
Public endpoints
Đối với các endpoint công khai, bạn chỉ cần gửi một yêu cầu GET.
Không cần API key.
Ví dụ
# https://docs.backpack.exchange/#tag/Markets/operation/get_open_interest
BASE_URL: str = "https://api.backpack.exchange/" # base api url for all endpoints
symbol: str = "SOL_USDC_PERP" # let's specify the symbol
result_url: str = f"{BASE_URL}api/v1/openInterest?symbol={symbol}" # add your argument as a query string. For GET requests you need only query string
from json import JSONDecodeError
response = requests.get(url=result_url) # make a get request
print(f"response status code: {response}")
if response.status_code == 200:
# make your code safe in case you receive unexpected data
try:
print(f"response json: {response.json()}")
open_interest: str = response.json()[0]["openInterest"]
print(f"open interest: {open_interest}")
except JSONDecodeError:
print(f"response text if response isn't json: {response.text}")
else:
...
response status code: <Response [200]>
response json: [{'openInterest': '81420.17', 'symbol': 'SOL_USDC_PERP', 'timestamp': 1743731167028}]
open interest: 81420.17
Nếu bạn có nhiều hơn một tham số (argument), hãy nối chúng bằng ký hiệu &.
Các endpoint riêng tư
Đối với các endpoint riêng tư, chúng ta cần tạo các header đặc biệt và body yêu cầu (đối với các yêu cầu POST).
import base64 # import base64 as "The signature should then be base64 encoded"
from time import time # import time for timestamp
import os # import os – to access environment variables
from cryptography.hazmat.primitives.asymmetric import ed25519 # import ed25519 to create a private key that will sign the message
# from dotenv import load_dotenv, find_dotenv # to create env variables from your .env file
# use this in your code
# load_dotenv(find_dotenv())
# public_key: str = os.getenv("PUBLIC_KEY")
# secret_key: str = os.getenv("SECRET_KEY")
public_key: str = "zDIJj9qneWIY0IYZ5aXoHcNMCm+XDhVcTssiT0HyY0A=" # unsafe!
secret_key: str = "4odxgSUxFrC/zsKWZF4OQwYAgnNu9hnWH3NxWfLAPz4=" # unsafe!
private_key = ed25519.Ed25519PrivateKey.from_private_bytes(
base64.b64decode(secret_key)
)
Hãy lấy địa chỉ nạp tiền.
https://docs.backpack.exchange/#tag/Capital/operation/get_deposit_address
timestamp = int(time() * 1e3) # Unix time in milliseconds
window: str = "5000" # Time window in milliseconds that the request is valid for. Increase if you have bad connection.
Bây giờ khi đã có X-Timestamp
(dấu thời gian), X-Window
(khoảng thời gian hợp lệ) và X-API-Key
(khóa công khai). hãy tạo X-Signature.
instruction: str = "depositAddressQuery"
sign_str = f"instruction={instruction}"
# This endpoint requires the "blockchain" parameter
params: dict = {
"blockchain": "Solana",
}
# Generic code to generate a valid query string from any parameters
sorted_params_list = []
for key, value in sorted(params.items()):
if isinstance(value, bool): # boolean variables should be lowercase in query strings
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)
instruction=depositAddressQuery&blockchain=Solana×tamp=1743731167786&window=5000
Bây giờ hãy tiến hành ký (sign) nó!
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/hmCdb9dXtMhUijoetARooBn56hqbxPNXZTV9Gy18YcBjZ8+HuPDJHz6LmeB/366bJ5uTCZSAA==
Tạo các header:
headers = {
"X-API-Key": public_key,
"X-Signature": encoded_signature,
"X-Timestamp": str(timestamp),
"X-Window": window,
"Content-Type": "application/json; charset=utf-8",
}
Gửi yêu cầu
url = "https://api.backpack.exchange/wapi/v1/capital/deposit/address"
response = requests.get(url=url, headers=headers, params=params)
print(response.json())
{'address': '8PzpK8s8ezuSnXPjdPxR2FdZfzm5urkcUePrDL419PRC'}
Lưu ý:
Đối với các yêu cầu POST
, hãy đính kèm nội dung JSON
và sử dụng phương thức post()
.
url_example = "https://api.backpack.exchange/wapi/v1/example"
response = requests.post(url=url, headers=headers, json=params)
SDK
SDK giúp quá trình phát triển trở nên dễ dàng hơn rất nhiều!
Ví dụ:
Last updated