Gemini API 极速上手:十分钟玩转交易接口!

2025-03-08 02:34:31 案例 阅读 57

Gemini API 接口接入指南

本文档旨在提供一份清晰、全面的 Gemini API 接口接入指南,帮助开发者快速上手并有效利用 Gemini 平台提供的各项功能。 本指南涵盖了 API 密钥获取、请求方式、数据格式、以及常见 API 接口的使用方法,并提供代码示例以供参考。

1. 准备工作

在使用 Gemini API 之前,为了确保顺利集成和安全使用,你需要完成以下准备工作:

  • Gemini 账户: 必须拥有一个有效的 Gemini 账户。这是访问 Gemini API 的基础。如果你尚未拥有账户,请立即访问 Gemini 官方网站 (通常为 gemini.com,请自行查阅最新官方链接) 进行注册。注册过程可能需要进行身份验证 (KYC),请提前准备好相关证件。
  • API 密钥: 创建并妥善保管 API 密钥至关重要。登录你的 Gemini 账户,导航至 API 设置或开发者中心页面,生成一个新的 API 密钥对,包括 API Key (公钥) 和 API Secret (私钥)。务必将 API Secret 视为高度敏感信息,如同你的账户密码。强烈建议采用以下安全措施:
    • 安全存储: 不要将 API Secret 存储在公共代码仓库 (如 GitHub) 中,或直接硬编码在应用程序中。 使用环境变量、配置文件或专门的密钥管理系统(如 HashiCorp Vault)来安全存储。
    • 权限控制: 部分 Gemini API 提供细粒度的权限控制。创建 API 密钥时,只授予应用程序所需的最低权限,避免不必要的安全风险。
    • 定期轮换: 建议定期轮换 API 密钥,以降低密钥泄露带来的潜在影响。
  • 了解 API 使用限制: Gemini API 遵循速率限制和其他使用条款,旨在维护系统的稳定性和公平性。你需要详细了解并严格遵守这些限制,以避免因超出限制而被暂时或永久限制访问。
    • 查阅官方文档: 具体的速率限制信息(例如每分钟请求次数、每天请求次数等)以及其他使用条款,都可以在 Gemini API 的官方文档中找到。文档通常会详细说明不同 API 端点的限制情况。
    • 错误处理: 在应用程序中实现适当的错误处理机制,以便在达到速率限制时能够优雅地处理错误,并避免不必要的重试请求。
    • 优化请求: 优化你的 API 请求,例如批量处理请求,减少不必要的 API 调用,以更有效地利用你的 API 额度。

2. API 密钥管理

API 密钥是访问 Gemini API 的重要凭证,用于验证你的身份并授权你使用 API 的各项功能。因此,必须极其小心地安全存储和管理你的 API 密钥,以防止未经授权的访问和滥用。

  • 绝对不要在客户端代码中硬编码 API 密钥: 将 API 密钥直接嵌入到客户端代码(例如 JavaScript 或移动应用程序代码)中是非常危险的,因为任何人都可以通过查看源代码或拦截网络流量来发现你的密钥。一旦密钥泄露,恶意用户就可以冒充你来访问 Gemini API,造成经济损失或其他严重后果。
  • 强烈建议使用环境变量或安全的配置文件: 将 API 密钥存储在环境变量中,或者使用加密的配置文件,是一种更为安全的方法。环境变量是操作系统级别的设置,只有授权用户才能访问。配置文件应该存储在服务器端,并设置适当的访问权限。在你的程序中,通过读取环境变量或配置文件来获取 API 密钥,而不是直接硬编码。例如,在 Python 中,可以使用 `os.environ.get("GEMINI_API_KEY")` 来获取名为 `GEMINI_API_KEY` 的环境变量的值。
  • 养成定期轮换 API 密钥的好习惯: 定期更换 API 密钥是一种重要的安全措施,可以限制泄露密钥的影响。即使你的密钥意外泄露,通过定期轮换,可以使旧的密钥失效,从而防止恶意用户继续使用它。 Gemini 平台通常会提供密钥轮换的机制,你应该熟悉并定期使用这些机制来更新你的 API 密钥。例如,可以每 90 天或 180 天更换一次密钥。

3. API 请求方式

Gemini API 采用 RESTful 架构风格,通过安全的 HTTPS 协议进行通信,确保数据传输的安全性与完整性。所有与 Gemini API 的交互请求都必须包含 X-GEMINI-APIKEY HTTP header,其值为你的 Gemini API 密钥。此密钥用于身份验证,是访问 API 的必要凭证。对于需要身份验证和数据完整性校验的请求,还必须包含 X-GEMINI-PAYLOAD X-GEMINI-SIGNATURE HTTP headers。 X-GEMINI-PAYLOAD 包含经过 Base64 编码的请求负载,而 X-GEMINI-SIGNATURE 则是由你的私钥对负载进行 HMAC-SHA384 加密后的签名,用于验证请求的来源和内容未被篡改。 请妥善保管您的 API 密钥和私钥,防止泄露。

  • 请求方法: Gemini API 支持多种标准的 HTTP 请求方法,包括但不限于 GET (用于获取数据)、POST (用于创建或更新资源) 等。选择合适的 HTTP 方法取决于你的操作类型。例如,获取账户余额通常使用 GET 方法,而下单操作则通常使用 POST 方法。
  • 数据格式: Gemini API 接口主要使用 JSON (JavaScript Object Notation) 格式进行数据交换。JSON 是一种轻量级的数据交换格式,易于解析和生成,被广泛应用于 Web API 中。 请求体和响应体均采用 JSON 格式。
  • Base URL: 所有对 Gemini API 的请求都应以 https://api.gemini.com/v1 作为基准 URL。 这是 API 的根端点,所有其他 API 路径都基于此 URL 构建。例如,要获取特定交易对的市场行情数据,你需要访问的完整 URL 为 https://api.gemini.com/v1/ticker/:symbol ,其中 :symbol 需要替换为你感兴趣的交易对代码(如 BTCUSD)。

4. API 签名

某些 Gemini API 接口,尤其是涉及资金操作或账户信息的接口,需要进行签名验证。签名机制用于确保请求的完整性、防止篡改,并验证请求的真实性,防止未经授权的访问。

  1. 构建 Payload: 将请求参数,包括 API 版本、请求方法、时间戳等,按照 API 文档规定的格式转换为 JSON 字符串。Payload 的结构必须与 Gemini API 的期望完全一致,任何细微的差异都可能导致签名验证失败。
  2. Base64 编码 Payload: 对 JSON 字符串进行 Base64 编码,将其转换为适合在 HTTP Header 中传输的格式。Base64 编码是一种将二进制数据转换为 ASCII 字符串的常见方法。
  3. 计算 HMAC-SHA384 签名: 使用你的 API Secret 作为密钥,对 Base64 编码后的 Payload 进行 HMAC-SHA384 加密。HMAC (Hash-based Message Authentication Code) 是一种消息认证码算法,它使用哈希函数(这里是 SHA384)和密钥来生成签名。SHA384 是一种安全哈希算法,可以生成 384 位的哈希值。API Secret 必须妥善保管,泄露会导致安全风险。
  4. 设置 Header: 将 Base64 编码后的 Payload 设置到 X-GEMINI-PAYLOAD header 中,将 HMAC-SHA384 签名设置到 X-GEMINI-SIGNATURE header 中。还需要设置 X-GEMINI-APIKEY header,其值为你的 API Key,以及 Content-Type: application/ header。

以下是 Python 语言的签名示例:

import hashlib import hmac import base64 import time import

api secret = "YOUR API SECRET" # 替换为你的 API Secret api key = "YOUR API KEY" # 替换为你的 API Key

def generate signature(payload, api secret): encoded payload = base64.b64encode(.dumps(payload).encode()) signature = hmac.new(api secret.encode(), encoded payload, hashlib.sha384).hexdigest() return signature

# 示例用法

payload = { "request": "/v1/order/new", "nonce": int(time.time() * 1000), "symbol": "BTCUSD", "amount": "1", "price": "10000", "side": "buy", "type": "exchange limit" }

signature = generate_signature(payload, api_secret)

headers = { "Content-Type": "application/", "X-GEMINI-APIKEY": api_key, "X-GEMINI-PAYLOAD": base64.b64encode(.dumps(payload).encode()).decode('utf-8'), "X-GEMINI-SIGNATURE": signature }

# 使用 requests 库发送请求 (需要安装 requests: pip install requests)

import requests

url = "https://api.gemini.com/v1/order/new"

response = requests.post(url, headers=headers, =payload)

print(response.status_code)

print(response.())

示例 Payload

Payload 是指在 API 请求中发送的数据,用于告知服务器需要执行的操作和相关参数。在加密货币交易中,Payload 通常包含交易类型、交易对、数量、价格等关键信息,其结构通常采用 JSON 格式以便于解析和处理。

以下是一个示例 Payload,使用 Python 的 .dumps() 方法将其序列化为 JSON 字符串:

payload = .dumps({
    "request": "/v1/order/new",
    "nonce": 123456789,
    "symbol": "btcusd",
    "amount": "1",
    "price": "10000",
    "side": "buy",
    "type": "exchange limit"
})

在这个例子中:

  • request : 指定 API 端点为 /v1/order/new ,表示创建一个新的订单。
  • nonce : 一个随机数,用于防止重放攻击,确保每个请求的唯一性。每次请求都应该生成一个新的 nonce 值。
  • symbol : 交易对,这里是 btcusd ,表示比特币对美元的交易。
  • amount : 交易数量,这里是 1 ,表示购买 1 个比特币。
  • price : 交易价格,这里是 10000 ,表示以 10000 美元的价格购买比特币。
  • side : 交易方向,这里是 buy ,表示买入。
  • type : 订单类型,这里是 exchange limit ,表示限价交易。

签名 (signature) 是对 Payload 进行加密处理后的结果,用于验证请求的完整性和真实性,防止数据被篡改。签名通常使用 API 密钥 (api_secret) 和 Payload 作为输入,通过特定的哈希算法(例如 HMAC-SHA384)生成。

以下是如何生成签名的示例代码:

signature = generate_signature(payload, api_secret)

generate_signature 函数的具体实现会根据交易所的要求而有所不同,但其核心思想都是使用 API 密钥对 Payload 进行加密。

为了发送 API 请求,需要设置 HTTP 请求头 (headers),包含 API 密钥 (api_key)、Payload 的 Base64 编码和签名。

以下是如何设置请求头的示例代码:

headers = {
    "X-GEMINI-APIKEY": api_key,
    "X-GEMINI-PAYLOAD": base64.b64encode(payload.encode()).decode(),
    "X-GEMINI-SIGNATURE": signature
}

在这个例子中:

  • X-GEMINI-APIKEY : 包含 API 密钥,用于身份验证。
  • X-GEMINI-PAYLOAD : 包含 Payload 的 Base64 编码,用于传递请求数据。需要将 Payload 编码为字节串,然后进行 Base64 编码,最后解码为字符串。
  • X-GEMINI-SIGNATURE : 包含签名,用于验证请求的完整性。

不同的交易所可能需要不同的请求头和签名方式,请务必参考交易所的 API 文档。

使用 requests 库发送 POST 请求

在 Python 中, requests 库是用于发起 HTTP 请求的事实标准。它允许开发者轻松地与 Web 服务进行交互,发送各种类型的请求,并处理响应。下面展示如何使用 requests 库向 Gemini 加密货币交易所的 API 发送 POST 请求以创建一个新的订单。

你需要导入 requests 模块:

import requests

然后,定义 API 端点 URL。Gemini API 的 /v1/order/new 端点用于创建新的订单。

url = "https://api.gemini.com/v1/order/new"

发送 POST 请求需要设置请求头 (headers) 和请求体 (payload)。请求头通常包含 API 密钥和内容类型等信息,请求体则包含订单的详细信息,如交易对、数量、价格和订单类型。 headers 应该是一个字典,包含Content-Type等信息; payload 也应该是一个字典,包含交易所要求的各种参数,比如 client_order_id symbol amount price , side , 和 type

headers = {
    'Content-Type': 'application/',
    'X-GEMINI-APIKEY': 'YOUR_API_KEY',
    'X-GEMINI-PAYLOAD': 'YOUR_PAYLOAD_BASE64_ENCODED',
    'X-GEMINI-SIGNATURE': 'YOUR_PAYLOAD_SIGNATURE'
}

payload = {
    'client_order_id': 'your_unique_order_id',
    'symbol': 'BTCUSD',
    'amount': '0.001',
    'price': '30000',
    'side': 'buy',
    'type': 'exchange limit'
}

注意,上述代码中的 YOUR_API_KEY YOUR_PAYLOAD_BASE64_ENCODED YOUR_PAYLOAD_SIGNATURE 需要替换为你的实际 API 密钥、Base64 编码后的 payload 以及使用你的私钥生成的签名。 交易所会对payload签名进行验证,保证请求的安全性。

接下来,使用 requests.post() 方法发送 POST 请求。将 URL、headers 和 payload 作为参数传递给该方法。 需要将 payload 转换为JSON格式字符串,再传给 data 参数。

response = requests.post(url, headers=headers, data=.dumps(payload))

response 对象包含了服务器返回的响应。可以使用 response.status_code 属性获取 HTTP 状态码,以了解请求是否成功。状态码 200 表示成功,其他状态码则表示出现了错误。

print(response.status_code)

你可以使用 response.text 属性获取响应的原始文本内容,或使用 response.() 方法将响应解析为 JSON 格式。使用 response.() 可以更方便的访问返回的数据。

print(response.())

完整示例代码:

import requests
import 
import base64
import hashlib
import hmac

api_key = 'YOUR_API_KEY'
api_secret = 'YOUR_API_SECRET'

url = "https://api.gemini.com/v1/order/new"

payload = {
    'request': '/v1/order/new',
    'nonce': 123456, # Replace with a unique nonce
    'client_order_id': 'your_unique_order_id',
    'symbol': 'BTCUSD',
    'amount': '0.001',
    'price': '30000',
    'side': 'buy',
    'type': 'exchange limit'
}

payload_ = .dumps(payload)
payload_base64 = base64.b64encode(payload_.encode())

signature = hmac.new(api_secret.encode(), payload_base64, hashlib.sha384).hexdigest()

headers = {
    'Content-Type': 'application/',
    'X-GEMINI-APIKEY': api_key,
    'X-GEMINI-PAYLOAD': payload_base64.decode(),
    'X-GEMINI-SIGNATURE': signature
}

response = requests.post(url, headers=headers)

print(response.status_code)
print(response.())

请务必查阅 Gemini API 的官方文档,了解有关请求头、请求体和身份验证的详细信息。 同时,请妥善保管你的 API 密钥和私钥,避免泄露。

5. 常用 API 接口

以下列举了一些常用的 Gemini API 接口及其使用方法,开发者可以利用这些接口获取市场数据、进行交易操作等。

  • 获取市场行情 (Ticker):
    • URL: /v1/ticker/:symbol
    • 方法: GET
    • 描述: 获取指定交易对的市场行情快照数据,包括最新成交价、最高买价、最低卖价、成交量等关键信息。 :symbol 需要替换成具体的交易对,例如 btcusd , ethusd
    • 示例: https://api.gemini.com/v1/ticker/btcusd
    • 响应示例:

      { "bid": "9999.00", "ask": "10001.00", "last": "10000.00", "volume": { "BTC": "100", "USD": "1000000", "timestamp": 1678886400000 } }

      字段说明:

      • bid : 最高买价。
      • ask : 最低卖价。
      • last : 最新成交价。
      • volume : 成交量,包含不同币种的成交量和时间戳。
      • volume.BTC : BTC 成交量。
      • volume.USD : USD 成交量。
      • volume.timestamp : 数据更新的时间戳 (Unix 时间戳,毫秒级别)。
  • 获取交易对信息 (Symbols):
    • URL: /v1/symbols
    • 方法: GET
    • 描述: 获取 Gemini 平台支持的所有交易对列表,例如 btcusd , ethusd 等。这对于动态构建交易界面或验证用户输入非常有用。
    • 示例: https://api.gemini.com/v1/symbols
    • 响应示例:

      [ "btcusd", "ethusd", "ltcusd" ]

  • 下单 (New Order):
    • URL: /v1/order/new
    • 方法: POST
    • 描述: 创建一个新的订单。此接口需要进行严格的签名验证,以确保交易的安全性。签名过程涉及使用您的私钥对请求参数进行哈希,并将签名包含在请求头中。请务必参考 Gemini API 文档了解详细的签名方法。
    • 请求参数 (JSON):
      • request : /v1/order/new (固定值,用于签名验证)。
      • nonce : 一个单调递增的整数,用于防止重放攻击。每次请求必须使用不同的 nonce 值。建议使用高精度的时间戳来生成 nonce
      • symbol : 交易对,例如 btcusd
      • amount : 数量,指定要买入或卖出的数字货币数量。
      • price : 价格,指定订单的执行价格。
      • side : buy sell ,表示买入或卖出。
      • type : 订单类型,例如 exchange limit exchange limit 表示限价单,只有当市场价格达到或优于指定价格时才会执行。其他订单类型包括市价单 ( exchange market ) 等。
      • client_order_id (可选): 客户端自定义的订单ID,方便客户端跟踪订单状态。
    • 响应示例:

      { "order_id": "123456789", "symbol": "btcusd", "amount": "1", "price": "10000", "side": "buy", "type": "exchange limit", "timestamp": "1678886400000", "is_live": true, "is_cancelled": false, "executed_amount": "0", "remaining_amount": "1" }

      字段说明:

      • order_id : Gemini 平台生成的订单 ID。
      • is_live : 订单是否有效。
      • is_cancelled : 订单是否已被取消。
      • executed_amount : 已成交的数量。
      • remaining_amount : 剩余未成交的数量。
  • 取消订单 (Cancel Order):
    • URL: /v1/order/cancel
    • 方法: POST
    • 描述: 取消一个指定的订单。同样需要进行签名验证。成功取消订单后,系统会将订单状态更新为已取消,并释放冻结的资金。
    • 请求参数 (JSON):
      • request : /v1/order/cancel (固定值,用于签名验证)。
      • nonce : 一个单调递增的整数,用于防止重放攻击。
      • order_id : 要取消的订单 ID。
    • 响应示例:

      { "is_cancelled": true }

      字段说明:

      • is_cancelled : 指示订单是否已成功取消。

6. 错误处理

Gemini API 通过返回 HTTP 状态码来指示请求的处理结果。理解并正确处理这些状态码对于构建健壮的应用程序至关重要。以下是一些常见的 HTTP 状态码及其含义,以及处理建议:

  • 200 OK : 请求成功。服务器已成功处理请求,并返回了预期的结果。
  • 400 Bad Request : 请求参数错误。这意味着客户端发送的请求包含无效的参数或格式不正确的数据。检查请求体、查询参数和请求头,确保它们符合 API 的规范。常见原因包括缺少必需参数、参数值超出范围或使用了不支持的数据类型。
  • 401 Unauthorized : 未授权访问,通常表示 API 密钥错误或者缺少签名。客户端需要提供有效的身份验证凭据才能访问受保护的资源。检查 API 密钥是否正确配置,以及请求中是否包含了必要的签名信息。如果使用了 HMAC 签名,请确保签名算法、密钥和数据的一致性。
  • 429 Too Many Requests : 超过速率限制。Gemini API 对每个 API 密钥都有请求速率限制,以防止滥用和保护服务器资源。当请求频率超过限制时,服务器会返回此状态码。解决方案包括实施指数退避策略、使用缓存机制减少请求次数,以及与 Gemini 协商更高的速率限制。
  • 500 Internal Server Error : 服务器内部错误。这表示服务器在处理请求时遇到了意外的错误,导致无法完成请求。这种错误通常是临时的,可能是由于服务器维护、代码错误或资源不足引起的。可以尝试稍后重新发送请求,如果问题仍然存在,请联系 Gemini 支持团队。

除了 HTTP 状态码之外,API 响应的 JSON 数据中还可能包含 result message 字段,用于提供更详细的错误信息。 result 字段通常指示请求的总体结果(例如,"success" 或 "error"),而 message 字段包含更具体的错误描述,有助于诊断和解决问题。例如:

{ "result": "error", "message": "Invalid API Key" }

在编写代码时,务必对这些错误进行周全的处理,以保证程序的稳定性和可靠性。强烈建议使用 try-except 块(或其他编程语言中等效的错误处理机制)来捕获潜在的异常。通过捕获异常,您可以采取适当的措施来处理错误,例如记录错误信息、向用户显示友好的错误消息或重试请求。良好的错误处理策略可以防止应用程序崩溃,并提高用户体验。还应考虑对不同类型的错误进行不同的处理,例如,对于 429 错误,可以实施退避策略,而对于 400 错误,则应该检查请求参数。

7. 更多信息

有关 Gemini API 的更多详细信息,请参考 Gemini 官方 API 文档。该文档是理解和使用 Gemini API 的关键资源,它提供了全面的技术规范,覆盖了API的各个方面。

文档中包含了所有 API 接口的详细描述,包括每个接口的功能、用途以及适用场景。对于每个接口,都会详细说明其请求参数,包括参数类型、是否必需、以及取值范围等。

文档还详细描述了 API 的响应格式,明确了响应中包含的各个字段的含义以及数据类型。这有助于开发者正确解析 API 的响应数据,并进行相应的处理。同时,文档还列出了所有可能的错误代码,并对每个错误代码进行了详细的解释,方便开发者诊断和解决问题。

通过仔细阅读 Gemini API 官方文档,开发者可以全面了解 API 的功能和使用方法,从而更好地利用 Gemini API 构建各种创新的加密货币应用。建议开发者在使用 API 前仔细阅读文档,并参考其中的示例代码。

相关推荐