FastAPI
Przegląd
FastAPI to nowoczesny, wysokowydajny framework webowy w Pythonie do budowania API. Oferuje automatyczną interaktywną dokumentację, walidację za pomocą type hints oraz wbudowane wsparcie dla async.
Pierwsze kroki
Utwórz repozytorium z szablonu
Na pulpicie przejdź do zakładki Tools & Deployment. Kliknij przycisk "New Repository", wybierz szablon FastAPI z listy rozwijanej, wpisz nazwę repozytorium i subdomenę, a następnie kliknij "Create Repository".
Sklonuj repozytorium
git clone https://<git-server>/<username>/<repo-name>.git
cd <repo-name>
Zainstaluj zależności
pip install -r requirements.txt
Uruchom serwer deweloperski
uvicorn app.main:app --reload
Serwer działa pod adresem http://localhost:8000. Interaktywna dokumentacja API: http://localhost:8000/docs.
Wypchnij swoje zmiany
git add .
git commit -m "Initial setup"
git push origin main
Lokalny rozwój z Dockerem
Jeśli nie masz lokalnie zainstalowanego Pythona, możesz użyć Dockera, aby uruchomić aplikację FastAPI.
Uruchamianie komend z Dockerem
# Zainstaluj zależności
docker run --rm -v $(pwd):/app -w /app python:3.12 pip install -r requirements.txt
# Uruchom serwer deweloperski
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"
Konfiguracja bazy danych
Platforma NStrim udostępnia bazę danych MySQL/MariaDB. Skonfiguruj połączenie w pliku .env lub bezpośrednio w module konfiguracji bazy danych.
DATABASE_URL=mysql+pymysql://<username>:<password>@db.<session-domain>:3306/<username>
student01). Sprawdź sekcję danych logowania na pulpicie, aby uzyskać dokładne wartości.Struktura projektu
├── app/
│ ├── main.py # Punkt wejścia aplikacji FastAPI
│ ├── routers/ # Moduły tras
│ ├── models/ # Modele SQLAlchemy
│ ├── schemas/ # Schematy Pydantic
│ └── database.py # Połączenie z bazą danych
├── templates/ # Szablony Jinja2
├── static/ # CSS, JS, obrazy
├── requirements.txt # Zależności Python
└── Dockerfile # Konfiguracja Docker
Typowe zadania
Tworzenie endpointu API
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}
Korzystanie z SQLAlchemy
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)
Schemat Pydantic do walidacji
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
Przydatne komendy
uvicorn app.main:app --reload
Uruchom serwer dev z auto-reload
pip install -r requirements.txt
Zainstaluj zależności
pip freeze > requirements.txt
Zapisz aktualne zależności
Rozwiązywanie problemów
OperationalError: Can't connect to MySQL server
Przyczyna: Host bazy danych jest nieprawidłowy lub niedostępny.
Rozwiązanie: Sprawdź, czy DATABASE_URL odpowiada hostowi bazy danych z twojego pulpitu.
ModuleNotFoundError: No module named 'app'
Rozwiązanie: Upewnij się, że uruchamiasz uvicorn z głównego katalogu projektu i że plik app/__init__.py istnieje.
422 Unprocessable Entity
Rozwiązanie: FastAPI automatycznie waliduje dane żądania. Sprawdź treść odpowiedzi, aby zobaczyć szczegóły, które pola nie przeszły walidacji. Odwiedź /docs, aby zobaczyć oczekiwany format żądania.