I helgen trengte jeg et offentlig endepunkt til å motta skjemainnsendelser fra en landingsside. Ingenting fancy — ta imot en JSON-POST, valider et par felt, returner et fornuftig svar. Hele greia ville håndtere kanskje 50 requests i uka. Jeg orket ikke å legge inn et kredittkort for en server til 20 dollar i måneden, lære et nytt infra-verktøy eller sitte gjennom en CI-pipeline hver gang jeg endret tre linjer. Ti minutter etter at jeg begynte, var API-et live i 300+ byer og kostet meg null dollar. Dette er gjennomgangen.
Cloudflare Workers
har et gratisnivå som faktisk er sjenerøst: 100 000 requests per dag, ingen kredittkort kreves for å
registrere seg, og koden din kjører på edge i stedet for i én region. For de små API-ene som de fleste
sideprosjekter trenger — webhook-mottakere, skjemahåndterere, lenkeforkortere, JSON-proxyer — kan du
shippe og glemme. Denne guiden tar deg fra "ingen Cloudflare-konto" til "live URL som svarer på
curl" på rundt ti minutter. Vi bygger et ekte endepunkt: en JSON-validator
som tar imot en POST, sjekker payloaden og ekko-returnerer et rent svar.
Hva du får gratis (og hva du ikke får)
Cloudflare Workers gratisplan gir deg 100 000 requests per dag og 10 millisekunder CPU-tid per request. Det høres knapt ut helt til du innser at de fleste JSON-endepunkter — parse body, gjør litt arbeid, returner et svar — blir ferdige godt under 1 ms. 10 ms-taket er CPU-tid, ikke veggklokke-tid, så en upstream-fetch som tar 800 ms teller fortsatt som omtrent 1 ms CPU fordi koden din mest venter på I/O.
Det du ikke får på gratisplanen: vedvarende lagring med høy gjennomstrømning (Workers KV har sin egen gratiskvote — sjenerøs i de fleste tilfeller, men adskilt fra request-tellingen), store svar-payloads, eller planlagte cron-triggere oftere enn én gang i minuttet. For en typisk "motta JSON, gjør en ting, returner JSON"-tjeneste som ikke trenger en database, vil du ikke treffe en vegg.
Installer Node.js og Wrangler
Wrangler er Cloudflares CLI for Workers. Installer den via npm — du trenger Node.js 18 eller nyere. Har du Node fra før, er det en one-liner:
npm install -g wrangler
# Verify
wrangler --version
# Should print 3.x or higherLogg nå inn. Det åpner en nettleser for OAuth, oppretter Cloudflare-kontoen om du ikke har en, og lagrer credentials lokalt:
wrangler login
# Opens https://dash.cloudflare.com/oauth/authorize ...
# After you approve: "Successfully logged in."Scaffold prosjektet
Én kommando og du har et prosjekt-skjelett med fornuftige defaults — en eksempel-
fetch-handler, en wrangler.toml-config, og den lokale dev-serveren allerede
klar:
npm create cloudflare@latest free-json-api
# When prompted, pick:
# "Hello World" Worker
# JavaScript (or TypeScript — your call)
# No deploy yet (we'll do that ourselves)
cd free-json-apiGeneratoren slipper alt du trenger i én mappe. Åpne src/index.js —
det er filen Workeren din kjører. Vi bytter ut innholdet med noe mer nyttig enn
standard-Hello World.
Skriv JSON-API-et
Her er en komplett Worker som tar imot en JSON-POST, validerer to påkrevde felt og returnerer et rent svar. Den håndterer de vanlige feilmodusene — feil metode, ugyldig JSON, manglende felt — i stedet for å krasje ut i en generisk 500:
export default {
async fetch(request) {
if (request.method !== 'POST') {
return Response.json(
{ error: 'POST only' },
{ status: 405 },
);
}
let body;
try {
body = await request.json();
} catch {
return Response.json(
{ error: 'Body must be valid JSON' },
{ status: 400 },
);
}
const { email, message } = body;
if (typeof email !== 'string' || typeof message !== 'string') {
return Response.json(
{ error: 'email and message are required (strings)' },
{ status: 422 },
);
}
return Response.json({
ok: true,
receivedAt: new Date().toISOString(),
echo: { email, message },
});
},
};To ting verdt å peke på.
Response.json()
serialiserer objektet og setter Content-Type: application/json for deg, så du
ikke trenger å huske headeren. Og å pakke request.json() inn i en try/catch er
den enkeltvanen som betyr mest når man bygger Workers — uten den returnerer en ugyldig payload
en ugjennomsiktig 500 fra Cloudflares runtime i stedet for en nyttig 400 fra koden din.
Test det lokalt
Wrangler kommer med en lokal dev-server som kjører samme V8-isolat som Cloudflare bruker i produksjon. Start den med:
npm run dev
# ⛅️ wrangler 3.x
# [wrangler:inf] Ready on http://localhost:8787I en annen terminal, slå mot den med curl. Prøv happy path først, deretter en
bevisst ødelagt payload — du skal se rene JSON-feil i stedet for stack traces:
# Happy path
curl -X POST http://localhost:8787 \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","message":"hello"}'
# {"ok":true,"receivedAt":"2025-10-15T...","echo":{...}}
# Broken JSON (note the missing closing brace)
curl -X POST http://localhost:8787 \
-H "Content-Type: application/json" \
-d '{"email": "ava"'
# {"error":"Body must be valid JSON"}
# Missing required field
curl -X POST http://localhost:8787 \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]"}'
# {"error":"email and message are required (strings)"}Deploy til verden — én kommando
Når lokalt funker, dytt det globalt:
npx wrangler deploy
# Total Upload: 1.18 KiB / gzip: 0.55 KiB
# Uploaded free-json-api (1.34 sec)
# Published free-json-api (4.21 sec)
# https://free-json-api.<your-subdomain>.workers.dev
# Current Deployment ID: ...Den URL-en er nå live på hvert Cloudflare-datasenter. En request fra Berlin treffer
Frankfurt, en fra Tokyo treffer Tokyo, en fra São Paulo treffer São Paulo — samme kode, ingen ekstra
konfig. Bundlen var 1,2 KiB. Test live-URL-en med samme curl-kommandoer du
brukte lokalt — bare bytt ut localhost:8787 med workers.dev-vertsnavnet
Wrangler skrev ut.
Når du vokser ut av gratisnivået
Det tar lang tid. 100k requests/dag er omtrent 1,15 requests per sekund i snitt over 24 timer — komfortabelt mer enn det de fleste sideprosjekter, interne verktøy eller tidligfase-produkter gjør. Det første som vanligvis skyver deg av gratisnivået er ikke request-antallet, men lagring: hvis du begynner å skrive mye til KV, R2 eller D1, har de sine egne kvoter. Den betalte planen starter på 5 dollar/måneden og gir deg 10 millioner requests, mer CPU per request, og et kredittkort- sikkerhetsnett for topper. De fleste prosjekter trenger den aldri.
Hva nå
Det du har shippet er den absolutte minste nyttige Worker. Ekte produksjons-endepunkter trenger noen vaner til — CORS for nettleser-kallere, secrets-håndtering for API-nøkler, edge-caching for trege upstreams, og en strategi for å proxye upstream-tjenester. Jeg dekket dem i Cloudflare Workers og JSON — en praktisk guide, som tar opp tråden der denne artikkelen slutter.
Noen verktøy jeg holder åpne mens jeg bygger Workers som håndterer JSON: JSON Formatter for å pretty-printe svar, JSON Validator for å finne ut nøyaktig hvorfor en payload ble avvist, og JSON Path for å planlegge felt-plukke-logikk før jeg skriver den. Selve JSON-formatet er spesifisert i RFC 8259 — verdt en skumlesning når du begynner å håndtere rare innganger fra ekte brukere.
For dypere Worker-mønstre — KV-lagring, Durable Objects, planlagte triggere, AI-inference- bindingene — er Cloudflares Workers examples-galleri den beste ressursen jeg har funnet. Det er en copy-pasteable liste med oppskrifter for de neste stegene.
Oppsummering
Cloudflare Workers er det sjeldne gratisnivået som faktisk er brukbart for ekte side- prosjekter. Ingen kredittkort for å starte, 100k requests om dagen, og en deploy-historie som passer i en enkelt kommando. Mønsteret i denne artikkelen — ta imot JSON, valider, returner JSON — dekker overraskende mye av det de fleste API-er gjør. Har du holdt deg fra å shippe et lite API fordi infraen føltes som et ork, er det her stien jeg skulle ønske jeg hadde tatt for tre år siden.