Lær FastAPI: Python-rammeverk med automatisk OpenAPI-dokumentasjon, asynkron ytelse via ASGI og Pydantic-basert datavalidering. Se hvordan det brukes til å eksponere ML-modeller som APIer.
Kort fortalt
- Skaper
- Sebastián Ramírez
- Første utgivelse
- Desember 2018
- Lisens
- MIT
- Nyeste versjon
- 0.141.1 på PyPI
- Kildekode
- github.com/fastapi/fastapi
Innhold i artikkelen (7)
Hva er FastAPI og hva gjør det spesielt?
FastAPI er et Python-rammeverk for å bygge webAPIer, bygget på Starlette for web-funksjonalitet og Pydantic for datavalidering. Det utnytter Pythons type hints til å generere validering, serialisering og API-dokumentasjon automatisk.
Rammeverket ble laget av Sebastián Ramírez og fikk sin første utgivelse på PyPI i desember 2018 (versjon 0.1.0). Det er lisensiert under MIT-lisensen, og kildekoden ligger i dag hos GitHub-organisasjonen fastapi/fastapi i stedet for på Ramírez' personlige konto som tidligere. Nyeste versjon på PyPI er 0.141.1, og pakken krever Python 3.10 eller nyere.

Automatisk OpenAPI-dokumentasjon
En av FastAPIs mest brukte funksjoner er automatisk generering av interaktiv API-dokumentasjon. Basert på Python type hints genererer FastAPI en OpenAPI 3.1-spesifikasjon, som vises som Swagger UI på `/docs` og ReDoc på `/redoc`.
Dokumentasjonen genereres direkte fra koden hver gang applikasjonen starter, så den kan ikke komme ut av synk med de faktiske endepunktene. For utviklingsteam betyr dette at API-kontrakter er dokumentert automatisk, og at testing kan gjøres direkte i nettleseren uten ekstra verktøy.
- Swagger UI: Interaktiv API-utforsker og testklient på /docs
- ReDoc: Alternativ, mer lesevennlig dokumentasjon på /redoc
- OpenAPI 3.1: Maskinlesbar API-spesifikasjon generert fra koden
- Automatisk skjema: Generert fra Pydantic-modeller og type hints
- Eksempelverdier: Kan angis eksplisitt eller utledes fra modellene
- Autentiseringsstøtte: OAuth2, JWT og API-nøkler kan dokumenteres i skjemaet
Asynkron programmering og ytelse
FastAPI er bygget på ASGI (Asynchronous Server Gateway Interface) og støtter native async/await. Dette gjør det mulig å håndtere mange samtidige forbindelser uten å blokkere – nyttig for APIer som selv venter mye på andre tjenester, databaser eller eksterne kall.
FastAPIs egen dokumentasjon omtaler rammeverket som ett av de raskeste Python-rammeverkene tilgjengelig, på nivå med Node.js og Go – en egenskap FastAPI arver fra Starlette, som det er bygget på. FastAPI kan ikke være raskere enn Starlette, siden det bruker Starlette internt; uavhengige TechEmpower-benchmarker har vist FastAPI under Uvicorn som ett av de raskeste Python-rammeverkene, kun slått av Starlette og Uvicorn selv.
Pydantic: Typesikker datavalidering
FastAPIs integrasjon med Pydantic gir datavalidering, serialisering og typekontroll. Pydantic-modeller definerer API-skjemaet som Python-klasser med type annotations, og FastAPI validerer automatisk innkommende data mot disse modellene og returnerer detaljerte JSON-feilmeldinger ved avvik.
Valideringskjernen i dagens Pydantic, versjon 2, er skrevet i Rust (pydantic-core), noe utviklerne oppgir gjør Pydantic til et av de raskeste datavalideringsbibliotekene for Python. Pydantic v2 er standarden i moderne FastAPI-applikasjoner.
FastAPI til å eksponere maskinlæringsmodeller
FastAPI brukes mye til å pakke maskinlæringsmodeller inn som APIer, og trekkes fram som eksempel av selskaper FastAPI selv viser fram i dokumentasjonen: Microsoft har brukt det til ML-tjenester, Uber har brukt det til en REST-server for prediksjoner i det interne verktøyet Ludwig, og Netflix bygde krisehåndteringsverktøyet Dispatch med FastAPI.
Den native async-støtten er nyttig når modell-inferens tar tid og man vil betjene mange samtidige forespørsler uten å blokkere hele prosessen mens man venter på svar. FastAPI har god integrasjon med Python-biblioteker som scikit-learn, TensorFlow, PyTorch og Hugging Face Transformers gjennom vanlig Python-importering – det finnes ingen spesiell FastAPI-spesifikk kobling til disse.
- ML-serving: Pakk PyTorch/TensorFlow-modeller som REST APIer
- LLM-integrasjon: Strøm responser via Server-Sent Events eller WebSockets
- Batch-prosessering: Håndter kø av prediksjonsforespørsler asynkront
- Modellversjonering: Administrer flere modellversjoner bak én API
- Helsekontroller: Egne endepunkter for overvåkning av tjenesten
Deployment og produksjonssetting
FastAPI-applikasjoner kjøres med Uvicorn som ASGI-server. For flere arbeidsprosesser anbefaler FastAPIs egen dokumentasjon å bruke `fastapi run --workers 4 main.py` eller `uvicorn main:app --workers 4` direkte, fremfor eldre oppsett med Gunicorn som prosessleder. På Kubernetes anbefales det derimot å kjøre én enkelt Uvicorn-prosess per container og heller skalere med flere containere.
Docker er et vanlig deploymentformat, og FastAPI kjører på vanlige container-plattformer som Kubernetes og AWS ECS. For serverless-deployment på AWS Lambda brukes gjerne adapteret Mangum, som oversetter mellom Lambda-hendelser og FastAPIs ASGI-grensesnitt.
Kom i gang med FastAPI
Installer FastAPI med `pip install "fastapi[standard]"`. Dette gir med seg standard-avhengigheter som Uvicorn og FastAPI CLI-kommandoene `fastapi dev` (utvikling, med auto-reload) og `fastapi run` (produksjon). Ønsker man kun kjernebiblioteket uten disse ekstra avhengighetene, holder det med `pip install fastapi`.
Det offisielle opplæringsdokumentet på fastapi.tiangolo.com dekker alt fra grunnleggende til avanserte emner, og er et naturlig utgangspunkt uansett erfaringsnivå. Se også Go-guiden for et sammenligningspunkt fra et annet moderne backend-språk.






