Prompt zum Erstellen eines Cloudflare Worker API-Proxys
Kopieren-Einfügen AI-Prompt zum Erstellen eines Cloudflare Workers, der externe API-Aufrufe proxyt und ratenbegrenzt, Auth-Header hinzufügt und Antworten zwischenspeichert.
CursorClaude CodeCodexWindsurf CloudflareTypeScript
Verwenden Sie diesen Prompt, um einen Cloudflare Worker zu erstellen, der vor einer externen API sitzt, Auth-Header injiziert, das Raten-Limit pro IP mit Workers KV durchsetzt und Antworten zwischenspeichert – sodass Clients nie Ihren Upstream-API-Schlüssel sehen.
Haupt-Prompt
You are building a Cloudflare Worker using TypeScript and the Workers runtime (not Node.js).The Worker will proxy requests to an upstream API (e.g., OpenAI at https://api.openai.com).
Task: create a production-ready API proxy Worker.
Requirements:- Use `wrangler` v3 for local dev. Scaffold with `bun create cloudflare@latest` and choose "Hello World" Worker with TypeScript.- Upstream URL: read from a Wrangler secret `UPSTREAM_URL` (string).- Auth: inject `Authorization: Bearer ${env.UPSTREAM_API_KEY}` on every proxied request, where `UPSTREAM_API_KEY` is a Wrangler secret. Never expose this header to the client.- CORS: allow only origins in `env.ALLOWED_ORIGINS` (comma-separated string secret). Return a `403` for disallowed origins. Handle preflight OPTIONS requests.- Rate limiting: use Workers KV binding `RATE_LIMIT_KV`. - Key: `rl:${ip}` where ip is `request.headers.get('CF-Connecting-IP')`. - Value: request count for the current UTC minute (TTL = 60 s). - Limit: 60 requests/minute per IP. Return `429` with `Retry-After: 60` if exceeded.- Caching: for GET requests, check `caches.default` before proxying upstream. Cache successful responses with `Cache-Control: public, max-age=300`.- Strip the following headers from the upstream response before returning to the client: `x-powered-by`, `server`, `cf-ray`.- Wrangler config: declare the KV namespace binding and all secrets in `wrangler.toml`.- Do NOT use Node.js APIs (`fs`, `path`, `Buffer`) — Workers runtime only.
Stop and list all planned files before writing code.Implementierungshinweise
- Cloudflare Workers empfangen ein
Requestund geben einResponsezurück – vermeiden Sieexpress-artige Muster. caches.defaultist der Cloudflare-Edge-Cache; er funktioniert nur in der Produktion. Verwenden SieMINIFLARE_CACHEfür lokale Entwicklungstests oder mocken Sie den Cache.CF-Connecting-IPwird von Cloudflare injiziert – es ist vom öffentlichen Internet aus nicht spoofbar, aber testen Sie lokal mit einer hartcodierten Fallback-IP.- Wrangler-Secrets werden mit
wrangler secret put UPSTREAM_API_KEYgesetzt – speichern Sie sie niemals inwrangler.tomloder in committed.env-Dateien.
Erwartete Dateiänderungen
wrangler.toml (new)src/index.ts (new — Worker entrypoint)src/cors.ts (new — CORS helper)src/rate-limit.ts (new — KV rate limiter)package.json (new)tsconfig.json (new).dev.vars (new — local dev secrets, gitignored).gitignore (edited — add .dev.vars)Akzeptanzkriterien
wrangler devstartet ohne Fehler und leitet einenGET /an die Upstream-URL weiter.- Eine IP, die 61 Anfragen in einer Minute sendet, erhält beim 61. Request einen
429. - Eine Anfrage von einer nicht erlaubten Domain erhält einen
403. - Der
Authorization-Header erscheint weder in der Antwort noch in einem client-sichtbaren Header. wrangler deployist erfolgreich und der Worker ist live aufworkers.dev.
Testbefehle
wrangler dev &# test normal proxycurl http://localhost:8787/ -H "Origin: https://myapp.com"# test CORS rejectioncurl http://localhost:8787/ -H "Origin: https://evil.com"# test rate limit (requires 61 rapid requests)for i in $(seq 1 62); do curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8787/; doneHäufige KI-Fehler
- Verwendung von
process.envanstelle desenv-Parameters, der an den Worker-fetch-Handler übergeben wird. - Vergessen,
OPTIONS-Preflight-Anfragen zu behandeln, was CORS für POST/PUT-Aufrufe unterbricht. - Speichern von
UPSTREAM_API_KEYinwrangler.tomlals einfache Variable anstelle eines Secrets. - Verwendung von
node:bufferoder anderen Node.js-Builtins, die in der Workers-Laufzeitumgebung nicht verfügbar sind.
Fix-Prompt
The Worker fails with a runtime error or leaks the API key. Fix in order:1. Replace `process.env.X` with `env.X` everywhere — Workers use the `env` handler parameter.2. Add an OPTIONS handler before the proxy logic that returns the CORS headers with a 204 status.3. Move `UPSTREAM_API_KEY` from `wrangler.toml` [vars] to a secret: `wrangler secret put UPSTREAM_API_KEY`.Show only the corrected diff.