FastAPI и Flask — два популярных Python-фреймворка для веб-разработки, но с разными философиями и подходами. Вот их основные различия:
# FastAPI асинхронный endpoint
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
# Flask синхронный endpoint
from flask import Flask
app = Flask(__name__)
@app.route("/items/<int:item_id>")
def read_item(item_id):
return {"item_id": item_id}
# FastAPI с Pydantic моделью
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
@app.post("/items/")
async def create_item(item: Item):
return item
# Flask (обычно используют библиотеки типа marshmallow)
from flask import request
@app.route("/items/", methods=["POST"])
def create_item():
data = request.get_json()
# Ручная проверка данных
if not data or "name" not in data:
return {"error": "Invalid data"}, 400
return data
# В FastAPI документация доступна автоматически:
# /docs - Swagger UI
# /redoc - ReDoc
# Во Flask нужно добавлять вручную:
from flasgger import Swagger
swagger = Swagger(app)
# FastAPI активно использует type hints
@app.get("/users/{user_id}")
async def read_user(user_id: int) -> dict:
return {"user_id": user_id}
# Flask тоже поддерживает, но не использует для валидации
@app.route("/users/<int:user_id>")
def read_user(user_id: int) -> dict:
return {"user_id": user_id}
# FastAPI Dependency Injection
from fastapi import Depends
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.get("/items/")
async def read_items(db: Session = Depends(get_db)):
return db.query(Item).all()
# Flask (обычно используют контекст или расширения)
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)
@app.route("/items/")
def read_items():
return Item.query.all()
Основные различия:
Оба фреймворка имеют свои сильные стороны, и выбор зависит от конкретных требований проекта.