¥
立即购买

API交互代码生成

478 浏览
44 试用
12 购买
Nov 19, 2025更新

该提示词用于根据用户输入的语言、API名称、目标操作、关键参数与认证方式,生成结构清晰、可直接运行的API交互代码。模板强调可控与可复现,所有代码均依赖用户显式输入的数据,不自动抓取外部信息。适用于构建第三方服务集成、内部系统对接或自动化脚本开发,帮助开发者快速完成多语言、多认证机制的API请求代码编写。

// Node.js 18+ required (for global fetch and AbortController)

const BASE_URL = 'https://api.morningweather.example'; const ENDPOINT = '/v1/forecast/daily';

// Authentication const API_KEY = 'YOUR_API_KEY_HERE'; // 请替换为你的实际API Key

// Query parameters const CITY = '苏州'; const COUNTRY_CODE = 'CN'; const DAYS = 7; const UNITS = 'metric'; // metric => 摄氏度 const LANG = 'zh-CN';

// Timeout and retry settings const TIMEOUT_MS = 5000; const MAX_ATTEMPTS = 3; const BACKOFF_MS = [200, 400, 800]; const RETRY_ON_STATUS = new Set([429, 500, 502, 503, 504]);

function buildUrl(base, endpoint, query) { const url = new URL(endpoint, base); Object.entries(query).forEach(([k, v]) => { if (v !== undefined && v !== null) url.searchParams.set(k, String(v)); }); return url.toString(); }

function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }

async function fetchWithRetry(url, options) { let lastError; for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS);

try {
  const res = await fetch(url, {
    ...options,
    signal: controller.signal,
  });
  clearTimeout(timeoutId);

  if (!res.ok) {
    const shouldRetry = RETRY_ON_STATUS.has(res.status) && attempt < MAX_ATTEMPTS;
    if (!shouldRetry) {
      let bodyText = '';
      try { bodyText = await res.text(); } catch {}
      const message = `HTTP ${res.status} ${res.statusText}${bodyText ? ` - ${bodyText}` : ''}`;
      throw new Error(message);
    }
    const backoff = BACKOFF_MS[Math.min(attempt - 1, BACKOFF_MS.length - 1)];
    await sleep(backoff);
    continue;
  }

  // Try to parse JSON
  const data = await res.json();
  return data;
} catch (err) {
  clearTimeout(timeoutId);
  lastError = err;

  const isAbort = err && (err.name === 'AbortError');
  const isNetwork = err && (err.code === 'ECONNRESET' || err.code === 'ENOTFOUND' || err.code === 'EAI_AGAIN');
  const canRetry = attempt < MAX_ATTEMPTS;

  if (canRetry && (isAbort || isNetwork)) {
    const backoff = BACKOFF_MS[Math.min(attempt - 1, BACKOFF_MS.length - 1)];
    await sleep(backoff);
    continue;
  }

  break;
}

} throw lastError; }

function pad(n) { return n < 10 ? 0${n} : ${n}; }

function formatDate(input) { if (typeof input === 'string') { const m = input.match(/^\d{4}-\d{2}-\d{2}/); if (m) return m[0]; const d = new Date(input); if (!isNaN(d)) return ${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}; return input; } if (typeof input === 'number') { // Heuristic: if seconds timestamp, multiply; if ms, use directly const d = new Date(input < 1e12 ? input * 1000 : input); if (!isNaN(d)) return ${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}; } if (input instanceof Date && !isNaN(input)) { return ${input.getFullYear()}-${pad(input.getMonth() + 1)}-${pad(input.getDate())}; } return String(input); }

function toFixedMaybe(num, digits = 1) { if (typeof num !== 'number') return String(num); if (!isFinite(num)) return String(num); return num.toFixed(digits); }

async function main() { if (typeof fetch !== 'function') { console.error('错误:需要 Node.js 18+ 以使用全局 fetch。'); process.exitCode = 1; return; }

if (!API_KEY || API_KEY === 'YOUR_API_KEY_HERE') { console.error('错误:请在常量 API_KEY 中设置有效的 API Key。'); process.exitCode = 1; return; }

const url = buildUrl(BASE_URL, ENDPOINT, { city: CITY, country_code: COUNTRY_CODE, days: DAYS, units: UNITS, lang: LANG, });

const headers = { 'Accept': 'application/json', 'X-API-Key': API_KEY, };

try { const data = await fetchWithRetry(url, { method: 'GET', headers });

const daily = Array.isArray(data?.daily) ? data.daily : null;
if (!daily || daily.length === 0) {
  console.error('未从响应中获取到 daily 预报数据。');
  process.exitCode = 1;
  return;
}

for (const day of daily) {
  const dateStr = formatDate(day?.date);
  const desc = day?.weather?.description ?? '(无描述)';
  const tMax = day?.temp?.max;
  const tMin = day?.temp?.min;

  const maxStr = typeof tMax === 'number' ? toFixedMaybe(tMax, 1) : 'N/A';
  const minStr = typeof tMin === 'number' ? toFixedMaybe(tMin, 1) : 'N/A';

  // 输出格式:YYYY-MM-DD 描述 最高/最低(°C)
  console.log(`${dateStr} ${desc} ${maxStr}/${minStr}(°C)`);
}

} catch (err) { console.error(请求失败:${err?.message || err}); process.exitCode = 1; } }

main();

#!/usr/bin/env python3

-- coding: utf-8 --

import sys import json import requests from requests.auth import HTTPBasicAuth from typing import Dict, Any

=========================

Configuration constants

=========================

TOKEN_URL = "https://auth.starcal.example/oauth2/token" OAUTH2_FLOW = "client_credentials" # informational, not used directly CLIENT_ID = "sc_client_9f2a" CLIENT_SECRET = "sc_secret_xxx" SCOPE = "calendar.events.write"

BASE_URL = "https://api.starcal.example" EVENTS_ENDPOINT = "/v1/events"

TIMEOUT_S = 10 # seconds

Event details

EVENT_TITLE = "季度规划评审" EVENT_START = "2025-11-25T10:00:00+08:00" EVENT_END = "2025-11-25T11:00:00+08:00" EVENT_TZ = "Asia/Shanghai" EVENT_ATTENDEES = ["dev1@team.example", "pm@team.example"] EVENT_REMINDER_MINUTES = 15 EVENT_LOCATION = "三楼3A会议室" EVENT_DESCRIPTION = ( "目标:评审Q1目标;议程:\n" "1) 指标回顾(15m)\n" "2) 风险与应对(20m)\n" "3) 行动项(25m)" ) NOTIFY_ATTENDEES = True

def get_access_token() -> str: """ Obtain OAuth2 access token using client credentials flow. """ data = { "grant_type": "client_credentials", "scope": SCOPE, } headers = { "Content-Type": "application/x-www-form-urlencoded", }

try:
    resp = requests.post(
        TOKEN_URL,
        data=data,
        headers=headers,
        timeout=TIMEOUT_S,
        auth=HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET),
    )
except requests.RequestException as e:
    print(f"[ERROR] Token request failed: {e}", file=sys.stderr)
    sys.exit(1)

if not resp.ok:
    msg = resp.text.strip() if resp.text else f"HTTP {resp.status_code}"
    print(f"[ERROR] Token endpoint returned error: {msg}", file=sys.stderr)
    sys.exit(1)

try:
    token_payload = resp.json()
except json.JSONDecodeError:
    print("[ERROR] Failed to parse token response as JSON.", file=sys.stderr)
    sys.exit(1)

access_token = token_payload.get("access_token")
token_type = token_payload.get("token_type", "").lower()

if not access_token or token_type != "bearer":
    print("[ERROR] Invalid token response: missing access_token or token_type != 'bearer'.", file=sys.stderr)
    sys.exit(1)

return access_token

def build_event_payload() -> Dict[str, Any]: """ Build the JSON payload for creating the calendar event. """ return { "title": EVENT_TITLE, "start_time": EVENT_START, "end_time": EVENT_END, "timezone": EVENT_TZ, "attendees": EVENT_ATTENDEES, "reminder_minutes": EVENT_REMINDER_MINUTES, "location": EVENT_LOCATION, "description": EVENT_DESCRIPTION, "notify_attendees": NOTIFY_ATTENDEES, }

def create_event(access_token: str, event_payload: Dict[str, Any]) -> Dict[str, Any]: """ Create an event via Starcal Calendar API. """ url = f"{BASE_URL}{EVENTS_ENDPOINT}" headers = { "Content-Type": "application/json", "Authorization": f"Bearer {access_token}", }

try:
    resp = requests.post(
        url,
        headers=headers,
        json=event_payload,
        timeout=TIMEOUT_S,
    )
except requests.RequestException as e:
    print(f"[ERROR] Create event request failed: {e}", file=sys.stderr)
    sys.exit(1)

if not resp.ok:
    details = ""
    try:
        details = resp.json()
    except Exception:
        details = resp.text
    print(f"[ERROR] Create event failed. HTTP {resp.status_code}. Details: {details}", file=sys.stderr)
    sys.exit(1)

try:
    return resp.json()
except json.JSONDecodeError:
    print("[ERROR] Failed to parse create-event response as JSON.", file=sys.stderr)
    sys.exit(1)

def main(): # Step 1: Obtain access token via OAuth2 client credentials token = get_access_token()

# Step 2: Build event payload and create event
payload = build_event_payload()
result = create_event(token, payload)

# Step 3: Print required fields on success
event_id = result.get("id")
html_link = result.get("html_link")

if not event_id:
    print("[ERROR] Event created but response missing 'id'. Full response:", file=sys.stderr)
    print(json.dumps(result, ensure_ascii=False, indent=2), file=sys.stderr)
    sys.exit(1)

print(f"event_id={event_id}")
print(f"html_link={html_link or 'N/A'}")

if name == "main": main()

package main

import ( "context" "crypto/md5" "encoding/base64" "errors" "fmt" "io" "net/http" "net/url" "os" "strings" "time" )

func main() { // Config from prompt baseURL := "https://storage.sanmu.example" username := "u_demo" password := "p_demo_token"

bucket := "build-artifacts"
objectKey := "release/2.3.1/app-linux-amd64.tar.gz"
filePath := "./dist/app.tar.gz"

contentType := "application/gzip"
providedContentMD5 := "Q2hlY2sgSW50ZWdyaXR5IQ=="
metaProject := "nebula"
metaEnv := "staging"

timeout := 30 * time.Second
expectedStatus := map[int]bool{200: true, 201: true}

// Open file
f, err := os.Open(filePath)
if err != nil {
	exitErr("open file: %v", err)
}
defer f.Close()

stat, err := f.Stat()
if err != nil {
	exitErr("stat file: %v", err)
}
if !stat.Mode().IsRegular() {
	exitErr("not a regular file: %s", filePath)
}

// Compute MD5 (base64) for local verification and potential header
computedB64MD5, err := computeFileBase64MD5(f)
if err != nil {
	exitErr("compute file MD5: %v", err)
}
// Reset the file offset to start for upload
if _, err := f.Seek(0, 0); err != nil {
	exitErr("seek file to start: %v", err)
}

// Choose which MD5 to send. If provided differs, warn and prefer computed to avoid server rejection.
contentMD5ToSend := computedB64MD5
if providedContentMD5 != "" && providedContentMD5 != computedB64MD5 {
	fmt.Fprintf(os.Stderr, "Warning: provided Content-MD5 (%s) != computed (%s). Using computed value to ensure integrity.\n", providedContentMD5, computedB64MD5)
} else if providedContentMD5 != "" {
	contentMD5ToSend = providedContentMD5
}

// Build URL
fullURL := buildObjectURL(baseURL, bucket, objectKey)

// Context with timeout (cancelable)
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()

// HTTP client
client := &http.Client{}

req, err := http.NewRequestWithContext(ctx, http.MethodPut, fullURL, f)
if err != nil {
	exitErr("create request: %v", err)
}
req.SetBasicAuth(username, password)
req.Header.Set("Content-Type", contentType)
req.Header.Set("Content-MD5", contentMD5ToSend)
req.Header.Set("X-Meta-Project", metaProject)
req.Header.Set("X-Meta-Env", metaEnv)
req.ContentLength = stat.Size()

resp, err := client.Do(req)
if err != nil {
	// Surface context-related errors clearly
	if errors.Is(err, context.DeadlineExceeded) {
		exitErr("request timed out after %s", timeout)
	}
	if errors.Is(err, context.Canceled) {
		exitErr("request canceled")
	}
	// net/http may wrap timeouts in *url.Error with Timeout()
	var urlErr *url.Error
	if errors.As(err, &urlErr) && urlErr.Timeout() {
		exitErr("request timeout: %v", err)
	}
	exitErr("request failed: %v", err)
}
defer resp.Body.Close()

if !expectedStatus[resp.StatusCode] {
	// Read limited body for error diagnostics
	const maxErrBody = 64 * 1024
	body, _ := io.ReadAll(io.LimitReader(resp.Body, maxErrBody))
	exitErr("unexpected status: %d. Body: %s", resp.StatusCode, string(body))
}

etag := resp.Header.Get("ETag")
lastModified := resp.Header.Get("Last-Modified")
location := resp.Header.Get("Location")

fmt.Printf("Upload succeeded. Status=%d\n", resp.StatusCode)
fmt.Printf("ETag: %s\n", etag)
if lastModified != "" {
	fmt.Printf("Last-Modified: %s\n", lastModified)
}
if location != "" {
	fmt.Printf("Location: %s\n", location)
}

}

func computeFileBase64MD5(f *os.File) (string, error) { h := md5.New() if _, err := io.Copy(h, f); err != nil { return "", err } sum := h.Sum(nil) return base64.StdEncoding.EncodeToString(sum), nil }

func buildObjectURL(base, bucket, objectKey string) string { base = strings.TrimRight(base, "/") path := "/v1/buckets/" + url.PathEscape(bucket) + "/objects/" + escapeObjectKeyPreserveSlashes(objectKey) return base + path }

func escapeObjectKeyPreserveSlashes(k string) string { if k == "" { return "" } parts := strings.Split(k, "/") for i, p := range parts { parts[i] = url.PathEscape(p) } return strings.Join(parts, "/") }

func exitErr(format string, a ...any) { fmt.Fprintf(os.Stderr, "Error: "+format+"\n", a...) os.Exit(1) }

示例详情

该提示词已被收录:
“程序员必备:提升开发效率的专业AI提示词合集”
让 AI 成为你的第二双手,从代码生成到测试文档全部搞定,节省 80% 开发时间
√ 立即可用 · 零学习成本
√ 参数化批量生成
√ 专业提示词工程师打磨

解决的问题

快速生成高质量且可直接执行的API交互代码,满足开发者在不同编程语言和框架下快速实现API功能的需求。

适用用户

后端开发工程师

帮助快速高效地生成API交互代码,无需手动编写重复逻辑,从而专注于复杂业务逻辑的研发。

前端开发人员

快速调用多种API接口生成代码,轻松完成与后端数据的交互,节省时间的同时保障代码规范性。

产品技术支持团队

为产品定制符合特定场景需求的API代码,适配多种框架,快速解决客户需求,提高交付效率。

特征总结

快速生成高质量API交互代码,减少编码时间,提升开发效率。
自动处理认证逻辑,让你无需担心繁琐的验证步骤。
支持多语言、多框架代码生成,覆盖主流编程场景。
灵活适配不同库与工具,满足多样化的业务需求。
智能化处理数据请求与参数传递,确保交互流程流畅无误。
代码结构清晰、逻辑完整,无需二次调整即可直接运行。
支持解决常见开发场景中的数据处理和交互逻辑优化。
降低上手难度,通过参数化模板快速定制符合需求的代码。

如何使用购买的提示词模板

1. 直接在外部 Chat 应用中使用

将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。

2. 发布为 API 接口调用

把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。

3. 在 MCP Client 中配置使用

在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。

AI 提示词价格
¥20.00元
先用后买,用好了再付款,超安全!

您购买后可以获得什么

获得完整提示词模板
- 共 128 tokens
- 5 个可调节参数
{ 编程语言 } { API名称与说明 } { 目标操作描述 } { 认证方式 } { 关键请求参数 }
获得社区贡献内容的使用权
- 精选社区优质案例,助您快速上手提示词
使用提示词兑换券,低至 ¥ 9.9
了解兑换券 →
限时半价

不要错过!

半价获取高级提示词-优惠即将到期

17
:
23
小时
:
59
分钟
:
59