问题背景与适用场景

在使用 Claude Code 进行 AI 辅助开发时,开发者经常需要调用外部 REST API 来扩展功能、集成第三方服务或构建自动化工作流。然而,Claude Code 本身并不直接暴露底层 HTTP 请求能力,开发者需要通过特定方式实现 API 调用。本教程将介绍三种经过验证的调用 REST API 的方法,帮助开发者快速集成 HolySheep 等 AI 服务,完成 base_url 配置、认证授权和错误处理等关键步骤。

前置条件

配置步骤详解

以下是通过 Claude Code 调用 REST API 的三种核心方法,每种方法适用于不同的使用场景和集成需求。

方法一:使用 Python 脚本调用 API

通过 Claude Code 的 /api 工具或外部脚本执行器,调用 Python 脚本实现 API 请求。这是灵活性最高的方式,支持完整的请求/响应处理。


import requests
import json
import os

class HolySheepAPIClient:
    """HolySheep AI API 客户端封装"""
    
    def __init__(self, api_key: str = None, base_url: str = "https://api.holysheep.ai"):
        self.api_key = api_key or os.environ.get("HOLYSHEEP_API_KEY")
        if not self.api_key:
            raise ValueError("API Key 未设置,请设置 HOLYSHEEP_API_KEY 环境变量")
        self.base_url = base_url.rstrip("/")
        self.session = requests.Session()
        self.session.headers.update({
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json",
            "User-Agent": "ClaudeCode-Integration/1.0"
        })
    
    def create_chat_completion(self, model: str = "claude-sonnet-4-20250514",
                               messages: list = None, max_tokens: int = 1024):
        """创建聊天补全请求"""
        endpoint = f"{self.base_url}/v1/chat/completions"
        payload = {
            "model": model,
            "messages": messages or [],
            "max_tokens": max_tokens,
            "temperature": 0.7
        }
        
        try:
            response = self.session.post(endpoint, json=payload, timeout=30)
            response.raise_for_status()
            return response.json()
        except requests.exceptions.HTTPError as e:
            error_detail = response.json() if response.content else {}
            raise APIError(f"HTTP错误 {response.status_code}: {error_detail}") from e
    
    def list_models(self):
        """获取可用模型列表"""
        endpoint = f"{self.base_url}/v1/models"
        response = self.session.get(endpoint)
        response.raise_for_status()
        return response.json()

使用示例

if __name__ == "__main__": client = HolySheepAPIClient() result = client.create_chat_completion( messages=[{"role": "user", "content": "解释 REST API 调用流程"}] ) print(json.dumps(result, indent=2, ensure_ascii=False))

方法二:使用 curl 命令直接调用

适用于快速测试和脚本化调用场景,无需编写额外代码即可完成 API 请求。


#!/bin/bash

HolySheep API 调用脚本示例

配置区

API_KEY="YOUR_HOLYSHEEP_API_KEY" BASE_URL="https://api.holysheep.ai" MODEL="claude-sonnet-4-20250514"

创建聊天补全

create_chat_completion() { curl -X POST "${BASE_URL}/v1/chat/completions" \ -H "Authorization: Bearer ${API_KEY}" \ -H "Content-Type: application/json" \ -H "User-Agent: ClaudeCode-Shell/1.0" \ -d '{ "model": "'"${MODEL}"'", "messages": [ {"role": "user", "content": "用中文解释什么是 API"} ], "max_tokens": 512, "temperature": 0.7 }' \ --silent --show-error --max-time 30 }

获取模型列表

list_models() { curl -X GET "${BASE_URL}/v1/models" \ -H "Authorization: Bearer ${API_KEY}" \ -H "User-Agent: ClaudeCode-Shell/1.0" \ --silent --show-error --max-time 15 }

主逻辑

case "$1" in chat) create_chat_completion | jq -r '.choices[0].message.content' ;; models) list_models | jq '.data[] | {id, object, created}' ;; *) echo "用法: $0 {chat|models}" exit 1 ;; esac

方法三:使用 Node.js 环境调用

适用于需要在 JavaScript/TypeScript 环境中集成 API 的场景,与前端项目无缝衔接。


const https = require('https');

class HolySheepNodeClient {
  constructor(apiKey, baseUrl = 'https://api.holysheep.ai') {
    this.apiKey = apiKey;
    this.baseUrl = baseUrl;
  }

  request(method, path, data = null) {
    return new Promise((resolve, reject) => {
      const url = new URL(this.baseUrl + path);
      const options = {
        hostname: url.hostname,
        path: url.pathname,
        method: method,
        headers: {
          'Authorization': Bearer ${this.apiKey},
          'Content-Type': 'application/json',
          'User-Agent': 'ClaudeCode-Node/1.0'
        }
      };

      const req = https.request(options, (res) => {
        let body = '';
        res.on('data', chunk => body += chunk);
        res.on('end', () => {
          try {
            const json = JSON.parse(body);
            if (res.statusCode >= 400) {
              reject(new Error(API Error: ${res.statusCode} - ${json.error?.message || body}));
            } else {
              resolve(json);
            }
          } catch (e) {
            reject(new Error(JSON Parse Error: ${body}));
          }
        });
      });

      req.on('error', reject);
      req.setTimeout(30000, () => {
        req.destroy();
        reject(new Error('Request timeout'));
      });

      if (data) {
        req.write(JSON.stringify(data));
      }
      req.end();
    });
  }

  chat(messages, model = 'claude-sonnet-4-20250514') {
    return this.request('POST', '/v1/chat/completions', {
      model,
      messages,
      max_tokens: 1024,
      temperature: 0.7
    });
  }
}

// 使用示例
const client = new HolySheep