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

Første utgivelse
Desember 2018
Lisens
MIT
Nyeste versjon
0.141.1 på PyPI
Innhold i artikkelen (7)
  1. Hva er FastAPI og hva gjør det spesielt?
  2. Automatisk OpenAPI-dokumentasjon
  3. Asynkron programmering og ytelse
  4. Pydantic: Typesikker datavalidering
  5. FastAPI til å eksponere maskinlæringsmodeller
  6. Deployment og produksjonssetting
  7. Kom i gang med FastAPI

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.

FastAPI bygger på Starlette og Pydantic, og brukes ofte til å pakke maskinlæringsmodeller inn…
FastAPI bygger på Starlette og Pydantic, og brukes ofte til å pakke maskinlæringsmodeller inn som APIer.

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
Annonse

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.

Annonse

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.

Annonse

Emner

Olav Sie Rotvær
Skrevet avOlav Sie RotværSkribent og utvikler

Olav Sie Rotvær skriver og drifter Norsk Næring. Han er utvikler, ikke journalist, og har ingen fagutdanning innenfor teknologi & innovasjon. Artiklene bygger derfor på primærkilder som oppgis der påstanden gjøres.

Om forfatteren og hvordan artiklene kildebelegges →