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.
Arbeidet utført: 2025
44,076 linjer typet klientkode, generert fra databasen
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.
Se tilbake på Migrerte HTTP‑API‑et fra Fiber til Huma v2 — 649 stier og 760 operasjoner — og nådde og holdt 100 % samsvar mellom rutene serveren registrerer og OpenAPI‑beskrivelsen den publiserer. Les videre: Bygde e‑post som en plattformfunksjon — tre leverandører med failover, leveringswebhooks, logging av sending og levering, maler og kampanjer — bak en oppstartskontroll som ikke lar plattformen starte uten minst én leverandør. Eller ta en titt på hele porteføljen.
Ett stykke av en lengre oversikt — og den ligger i sin helhet her.
Hver oppføring er skrevet på samme måte: situasjonen, oppgaven, hva vi gjorde, og hva som endret seg.