Sådan bygger du en REST API: design, sikkerhed og deployment
For at bygge en REST API skal du liste de ressourcer, din app håndterer (brugere, ordrer, bookinger), give hver en URL som /orders og /orders/{id} og bruge HTTP-metoder til handlingerne: GET til at læse, POST til at oprette, PATCH til at opdatere og DELETE til at slette. Returnér JSON med meningsfulde statuskoder, valider al input, kræv login og tilladelseskontrol pr. post på serveren, og paginér lister. Dokumentér derefter endpoints, og deploy API'en bag HTTPS.
Denne guide dækker designbeslutningerne, et gennemarbejdet sæt ruter, prompts til en AI-app-builder og de fejl, der skaber sikkerhedshuller. Hvis API'er er nye for dig, så start med hvad en API er.
Hvornår du har brug for en REST API
- Dit webfrontend skal gemme og hente data fra en server
- En mobilapp, partner eller automationsværktøj skal have adgang til dine data
- Andre tjenester sender dig hændelser (webhooks)
- Du deler arbejdet mellem et frontend- og et backend-team
REST er den mest almindelige stil, men ikke den eneste. REST vs GraphQL forklarer, hvornår ét fleksibelt query-endpoint passer bedre.
Design først: ressourcer og ruter
Skriv de substantiver ned, din app bruger, og hvad folk gør med dem. For en simpel bookingapp:
| Metode | Rute | Hvad den gør | Succeskode |
|---|---|---|---|
GET | /api/bookings | Lister brugerens bookinger (paginerede) | 200 |
POST | /api/bookings | Opretter en booking | 201 |
GET | /api/bookings/{id} | Henter én booking | 200 |
PATCH | /api/bookings/{id} | Ændrer nogle felter | 200 |
DELETE | /api/bookings/{id} | Annullerer en booking | 204 |
GET | /api/health | Sundhedstjek til overvågning | 200 |
Disse svarer til create, read, update og delete; se hvad CRUD er. Konventioner, det er værd at følge:
- Flertalsnavneord og ingen verber i URL'er:
/bookings, ikke/getBookings. - Indlejr kun ét niveau, når det gør ejerskab tydeligt:
/bookings/{id}/notes. - Handlinger, der ikke er CRUD, kan være under-ressourcer:
POST /bookings/{id}/canceler tydeligere end et magisk PATCH. - Ensartede navne på felter, for eksempel
created_atalle steder.
Statuskoder og fejl
Brug standard HTTP-koder, så klienter kan se, hvad der skete, uden at tolke tekst:
| Kode | Betydning | Brug når |
|---|---|---|
| 200 | OK | Vellykket læsning eller opdatering |
| 201 | Created | En POST har oprettet noget |
| 204 | No Content | Succes uden noget at returnere |
| 400 | Bad Request | Input fejlede valideringen |
| 401 | Unauthorized | Ikke logget ind, eller ugyldigt token |
| 403 | Forbidden | Logget ind, men ikke tilladt |
| 404 | Not Found | Findes ikke, eller kaldet må ikke vide, at den findes |
| 409 | Conflict | Dublet, eller tidspunktet er allerede booket |
| 429 | Too Many Requests | Rate limit er nået |
| 500 | Server Error | Noget gik i stykker på din side |
Returnér fejl i ét ensartet JSON-format, for eksempel {"error": {"code": "slot_taken", "message": "Det tidspunkt er ikke længere ledigt."}}, og inkluder aldrig stack traces eller databasefejl i svar.
Valgmuligheder og afvejninger
| Beslutning | Enkelt valg | Alternativ |
|---|---|---|
| Hvor API'en ligger | API-ruter i dit webframework | En separat API-tjeneste, nyttig til flere klienter eller et andet sprog |
| Login | Session-cookies til din egen webapp | Tokens (bearer tokens eller API-nøgler) til mobilapps og tredjeparter |
| Paginering | ?page=2&limit=20 | Cursor-baseret (?after=...), mere stabil for store, ændrende lister |
| Versionering | Ingen, før andre brugere er afhængige | /v1/ i stien, når andre bruger den |
| Dokumentation | En README med ruter | En OpenAPI-specifikation, som værktøjer kan lave om til interaktiv dokumentation og klientkode |
Trin for trin
- Liste ressourcer og ruter som ovenfor, inklusive hvem der må kalde hver enkelt.
- Modellér dataene i din database med de felter og relationer, du har brug for.
- Byg læseruterne først, derefter oprette, opdatere og slette.
- Valider input på hver skrivning med et schema-bibliotek: påkrævede felter, typer, længder, tilladte værdier. Afvis ukendte felter.
- Tilføj login, derefter autorisation pr. post: at hente
/bookings/42skal tjekke, at booking 42 tilhører kalderen, ikke blot at nogen er logget ind. - Paginér alle lister og begræns sidestørrelsen.
- Begræns antallet af kald til login og dyre ruter. Se rate limiting.
- Konfigurér CORS kun, hvis browsere på andre domæner skal kalde API'en, og list disse oprindelser eksplicit. Sådan retter du CORS-fejl forklarer de fejl, du vil se.
- Skriv dokumentation og tests for hver rute, inklusive fejltilfældene.
- Deploy med hemmeligheder i miljøvariabler, HTTPS, logs og et sundhedstjek.
Prompts til din AI-builder
Stilladsering:
Opret en REST API til bookinger med disse ruter: GET /api/health, GET /api/bookings (pagineret, maks. 50 pr. side), POST /api/bookings, GET /api/bookings/:id, PATCH /api/bookings/:id, DELETE /api/bookings/:id. Gem data i vores database. Valider request-kroppe med et schema-bibliotek, og afvis ukendte felter. Returnér JSON-fejl som {"error": {"code", "message"}} med korrekte statuskoder (400, 401, 403, 404, 409). Behold hemmeligheder i miljøvariabler.
Sikkerhed:
Kræv login på alle booking-ruter. Ved hver læsning, opdatering og sletning skal serveren tjekke, at bookingen tilhører den aktuelle bruger; returnér 404, hvis den ikke gør. Accepter aldrig bruger-ID'er eller roller fra request-kroppen. Begræns POST /api/bookings til 20 pr. minut pr. bruger. Log fejl på serveren uden at returnere stack traces.
Dokumentation:
Skriv en OpenAPI-beskrivelse af disse ruter og en kort README med eksempler på requests og svar for hver enkelt.
Test din API
Test udefra frontenden, for angribere vil gøre det:
- Hver rute virker med gyldig input og returnerer den dokumenterede form og kode
- Manglende eller ugyldige felter giver 400 med en tydelig besked
- Intet token giver 401 på hver beskyttet rute
- Bruger A, der henter bruger B's post via ID, får 404 eller 403
- Lister er paginerede; en enorm
limitbegrænses - Dublet- eller konfliktoprettelser giver 409, ikke 500
- Rate limits giver 429
- Fejlsvar indeholder ingen stack traces, SQL eller hemmeligheder
- CORS tillader kun de oprindelser, du har tænkt dig
Almindelige fejl
- Tjekke login, men ikke ejerskab. Det mest almindelige hul i API'er: enhver indlogget bruger kan læse enhver post ved at ændre ID'et.
- Stole på klienten. Priser, roller og bruger-ID'er fra request-kroppen kan redigeres.
- Returnere hele databaserækker. Password-hashes og interne felter lækker. Vælg, hvad hvert svar indeholder.
- Ubegrænsede lister. Én forespørgsel for hver post kan bremse hele appen.
200 OKmed en fejlbesked i svaret. Klienter og overvågning kan ikke se, at det fejlede.- CORS sat til at tillade alt på en API, der bruger cookies.
- Ingen sundhedstjek eller logs, så du hører om nedbrud fra brugerne.
Til et bredere tjek før lancering, se sikkerhedstjeklisten for AI-byggede apps.
Sådan bygger du en REST API i Mythex
Du kan bede Mythex om en API som en del af din app eller som sin egen tjeneste. Dokumentationens opskrift REST API-backend har en startprompt: navngiv dit framework og dine ruter, bed om tydelige JSON-fejl, behold hemmeligheder i miljøvariabler, og inkluder en Dockerfile. Container-backends i Node, Python, C#, Java og andre publiceres via en Dockerfile, og Mythex håndterer deployet fra Publish (API-backends). Et projekt kan køre en hjemmeside og en API-server side om side, og du kan skifte mellem dem i forhåndsvisningen. Gem nøgler som projekthemmeligheder, og hvis API'en har brug for en database, så bed om den i chatten. Til planlagt arbejde omkring din API, se sådan kører du baggrundsjobs.
Spørgsmål
Hvad er en REST API?
En REST API er en måde, programmer kan arbejde med din apps data over HTTP. Hver type data er en ressource med sin egen URL, for eksempel /orders, og standardmetoder handler på den: GET til at læse, POST til at oprette, PATCH eller PUT til at opdatere og DELETE til at slette. Data sendes typisk som JSON.
Hvilket sprog skal jeg bygge en REST API i?
Brug det, du eller dit team kan vedligeholde. Node.js med Express eller Fastify, Python med FastAPI og C#- eller Java-frameworks fungerer alle godt. Designreglerne for ruter, statuskoder, validering og login betyder mere end sproget.
Hvordan sikrer jeg en REST API?
Kræv login på alle ruter, der ikke er offentlige, tjek på serveren, at afsenderen må tilgå hver enkelt post, valider al input, brug HTTPS, begræns antallet af forespørgsler og gem hemmeligheder i miljøvariabler. Stol aldrig på ID'er eller roller sendt fra klienten.
Har jeg brug for en separat backend til en REST API?
Ikke altid. Frameworks som Next.js kan servere API-ruter sammen med sider. En separat API-tjeneste giver mening, når flere klienter (web, mobil, partnere) bruger den, eller når den har brug for sit eget sprog eller sin egen skalering.