FastAPI
Overzicht
FastAPI is een modern, hoogperformant Python-webframework voor het bouwen van API's. Het beschikt standaard over automatische interactieve documentatie, validatie van type-hints en async-ondersteuning.
Snelstart
Repository aanmaken vanuit sjabloon
Ga in je dashboard naar het tabblad Tools & Deployment. Klik op de knop "New Repository", selecteer het FastAPI-sjabloon uit het dropdownmenu, voer een repository-naam en subdomein in en klik vervolgens op "Create Repository".
Je repository klonen
git clone https://<git-server>/<username>/<repo-name>.git
cd <repo-name>
Afhankelijkheden installeren
pip install -r requirements.txt
Ontwikkelingsserver starten
uvicorn app.main:app --reload
De server draait op http://localhost:8000. Interactieve API-documentatie op http://localhost:8000/docs.
Je wijzigingen pushen
git add .
git commit -m "Initial setup"
git push origin main
Lokale ontwikkeling met Docker
Als je geen Python lokaal hebt geïnstalleerd, kun je Docker gebruiken om je FastAPI-applicatie uit te voeren.
Commando's uitvoeren met Docker
# Install dependencies
docker run --rm -v $(pwd):/app -w /app python:3.12 pip install -r requirements.txt
# Run development server
docker run --rm -v $(pwd):/app -w /app -p 8000:8000 python:3.12 sh -c "pip install -r requirements.txt && uvicorn app.main:app --host 0.0.0.0 --reload"
Databaseconfiguratie
Het NStrim-platform biedt je een MySQL/MariaDB-database. Configureer je verbinding in het .env-bestand of direct in je databaseconfiguratiemodule.
DATABASE_URL=mysql+pymysql://<username>:<password>@db.<session-domain>:3306/<username>
student01). Controleer het inloggegevens-gedeelte van je dashboard voor de exacte waarden.Projectstructuur
├── app/
│ ├── main.py # FastAPI-applicatie-startpunt
│ ├── routers/ # Route-modules
│ ├── models/ # SQLAlchemy-modellen
│ ├── schemas/ # Pydantic-schema's
│ └── database.py # Database-verbinding
├── templates/ # Jinja2-templates
├── static/ # CSS, JS, afbeeldingen
├── requirements.txt # Python-afhankelijkheden
└── Dockerfile # Docker-configuratie
Veelvoorkomende taken
Een API-endpoint aanmaken
from fastapi import APIRouter
router = APIRouter()
@router.get("/users")
async def get_users():
return [{"name": "Alice"}, {"name": "Bob"}]
@router.post("/users")
async def create_user(name: str, email: str):
return {"name": name, "email": email}
SQLAlchemy gebruiken
from sqlalchemy import Column, Integer, String
from app.database import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
name = Column(String(100))
email = Column(String(255), unique=True)
Pydantic-schema voor validatie
from pydantic import BaseModel
class UserCreate(BaseModel):
name: str
email: str
class UserResponse(BaseModel):
id: int
name: str
email: str
class Config:
from_attributes = True
Handige commando's
uvicorn app.main:app --reload
Dev-server starten met auto-reload
pip install -r requirements.txt
Afhankelijkheden installeren
pip freeze > requirements.txt
Huidige afhankelijkheden opslaan
Probleemoplossing
OperationalError: Can't connect to MySQL server
Oorzaak: Database-host is onjuist of niet bereikbaar.
Oplossing: Controleer of DATABASE_URL overeenkomt met de database-host uit je dashboard.
ModuleNotFoundError: No module named 'app'
Oplossing: Zorg ervoor dat je uvicorn vanuit de hoofdmap van het project uitvoert en dat app/__init__.py bestaat.
422 Unprocessable Entity
Oplossing: FastAPI valideert verzoekgegevens automatisch. Bekijk de responsbody voor details over welke velden de validatie niet hebben doorstaan. Bezoek /docs om het verwachte verzoekformaat te zien.