Hoppa till innehållet
AI-grafen
E· Universitetprogrammering· ca 60 min· utvecklande· verifierad 2026-09-20

Bygga ett API med FastAPI

Kunna exponera en modell bakom ett HTTP-API med validering och felhantering.

Förkunskaper

Intuition

En modell i en notebook hjälper ingen. Bakom ett HTTP-API kan vilken app som helst använda den.

FastAPI: du deklarerar in- och utdata som Pydantic-modeller → validering, felmeddelanden och dokumentation (/docs) gratis. Async-endpoints passar LLM-anrop.

Minimikrav för något som ska köras på riktigt:

  • /healthz som svarar snabbt (för övervakning),
  • validering av indata (längd, typ) → 422 automatiskt,
  • tydliga fel: 400 för fel input, 503 när modellen/leverantören är nere, aldrig 500 med stacktrace,
  • timeout mot allt externt,
  • loggning av varje anrop (utan känsligt innehåll),
  • en gräns på antal anrop per klient.

Kod

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
import httpx, asyncio

app = FastAPI(title="Sentiment-API")

class In(BaseModel):
    text: str = Field(min_length=1, max_length=2000)

class Out(BaseModel):
    label: str
    score: float

@app.get("/healthz")
async def healthz():
    return {"ok": True}

@app.post("/v1/sentiment", response_model=Out)
async def sentiment(body: In):
    try:
        async with httpx.AsyncClient(timeout=10) as c:
            r = await c.post(MODEL_URL, json={"text": body.text})
            r.raise_for_status()
    except (httpx.TimeoutException, httpx.HTTPError):
        raise HTTPException(503, "Modellen svarar inte just nu — försök igen")
    d = r.json()
    return Out(label=d["label"], score=d["score"])

Kör: uvicorn app:app --port 8000. Testa med httpx.AsyncClient(app=app) i pytest — inga nätverksanrop behövs.

Behärskning innebär

  • Exponerar en modell bakom ett FastAPI-endpoint med Pydantic-validering
  • Hanterar fel med rätt statuskoder
  • Lägger till hälsokontroll, timeout och enkel rate limit

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser