# Genererte API‑kontrakten fra databasen og utover — OpenAPI, en typet TypeScript‑klient på 44 076 linjer, 61 mock‑handlere og grensene brukergrensesnittet håndhever — med en kontroll i hvert ledd som feiler ved avvik.

2025

**Situasjon.** Frontend og backend utvikler seg i hvert sitt tempo, og antakelsene deres om innholdet i en forespørsel kan gli fra hverandre uten at noen merker det. Som regel oppdager man det gjennom en 422 i nettleseren — etter at avviket allerede er levert, som er det dyreste tidspunktet å få vite om det på. Å skrive begge sidene for hånd ut fra samme dokument løser det ikke; det flytter bare avviket over til den som glemte å lese dokumentet på nytt.

**Oppgave.** De to sidene måtte genereres fra én kilde i stedet for å avtales mellom to, og hvert trinn i genereringen måtte kontrolleres i stedet for å tas på tro.

**Handling.** Kjeden starter i databasen og går utover. Skjemaet og funksjonene i det definerer formene; Go‑typene definerer API‑et; Huma lager OpenAPI‑beskrivelsen ut fra dem; en typet TypeScript‑klient — 44 076 linjer i alt — genereres fra den beskrivelsen; 61 mock‑handlere genereres ved siden av, slik at frontendens egne tester kjører mot den virkelige kontrakten og ikke mot håndskrevne testdata; og grensene brukergrensesnittet håndhever i et webskjema, kommer fra samme sted i stedet for å bli skrevet inn på nytt i en validator. Hvert ledd har en vakt. En kontraktskontroll i CI sammenligner det frontenden sender, med det API‑et forventer, og får bygget til å feile ved avvik, med en skjemaprobe under som kontrollerer de faktiske formene i stedet for en beskrivelse av dem. Den dekker med vilje stedene der avvik gjerne gjemmer seg: valgfrie felt i forespørselskroppen, der «mangler» og «null» blandes sammen, og enumer i spørringsparametere, der de to sidene i det stille kan være uenige om de tillatte verdiene.

**Resultat.** Et felt kan ikke endres på bare én side — det feiler i det første leddet som merker det, i et bygg, minutter etter endringen. Det fjernet en tilbakevendende og virkelig irriterende klasse feil, den typen som er usynlig i kodegjennomgang og bare viser seg under kjøring. Prisen er et genereringstrinn midt i alt sammen: å generere på nytt er et ork, og kjeden er bare så pålitelig som sitt dårligst bevoktede ledd, og derfor fikk hvert ledd sin vakt.

---

- Rolle: Backend‑ingeniør
- Kategorier: [Backend‑utvikling](https://engineer.company/nb/categories/backend/), [API‑er og integrasjon](https://engineer.company/nb/categories/api/), [DevOps](https://engineer.company/nb/categories/devops/), [Automatisering og CI/CD](https://engineer.company/nb/categories/automation/), [Pålitelighet og sikkerhetskopier](https://engineer.company/nb/categories/reliability/), [Testing og kvalitetssikring](https://engineer.company/nb/categories/testing/)
- Tjenester: [Backend- og API‑utvikling](https://engineer.company/nb/services/backend-development/), [DevOps og CI/CD‑automatisering](https://engineer.company/nb/services/devops-cicd/)

<https://engineer.company/nb/portfolio/built-a-request-schema-validation-contract-with-automated-61/>
