FastAPI
Jest to jeden z mikroframeworków pythonowych wykorzystywanych przy apkach webowych.
Jego zaletą na tle podobnych bibliotek typu flask jest automatyczne generowanie dokumentacji oraz automatyczne sprawdzanie i walidacja danych.
Podstawy
from typing import Optional
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, slowo: Optional[str] = None):
"""
przyjmujemy zapytanie i zwracamy je jako json
np /items/8?q=zbyszek
"""
return {"item_id": item_id, "slowo": slowo}
Aby uruchomić powuższy kod (plik main.py
) należy użyć komendy:
uvicorn main:app --reload
# main - nazwa pliku
# app - obiekt typu FastAPI
# --reload - restartuje serwer po zmianach w kodzie
Dodatkowo pod ścieżką /docs
dostępna jest dokumentacja użytych API.
Definiowanie modeli
Modele można definiować z wykorzystaniem biblioteki pytandic (tutorial od bulldogjobs).
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: Optional[bool] = None
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
Serwowanie plików HTML
FastAPI może być łączone z każdym silnikiem do generowania plików HTML ze schematów. Najpopularniejszym wyborem jest tutaj Jinja2 (przykład użycia).
Jeśli nie potrzebujemy niczego tak skomplikowanego i wystarczą nam proste, ręcznie napisane pliki HTML to wystarczy wystawić je jako pliki statyczne lub jako pojedyncze pliki.
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
#lub
@app.get("/")
async def read_index():
return FileResponse('index.html')
Bazy danych
FastAPI nie jest związane z żadną biblioteką do baz danych.
Mamy tutaj dużą dowolność. Dla przykładu w oficjalnej dokumentacji pokazano przykład użycia sla SQLAlchemy. Można też użyć Peewee.