EMZETT.
Увійти

FastAPI і Flask: створення вебAPI на Python

Коротко: Flask — компактний фреймворк вебсервера, FastAPI використовує анотації типів для автоматичної валідації та документації; обидва віддають API JSON кількома рядками коду.

Докладніше: Програми на Python можна надавати як вебAPI: браузер/застосунок надсилає HTTP-запити, сервер відповідає JSON. Flask (2010) і FastAPI (2018) — два популярні фреймворки; Django — варіант «усе включено».

Подробиці

Flask у 10 рядках

from flask import Flask, jsonify, request
app = Flask(__name__)
games = [{"id": 1, "title": "Zelda"}]
@app.get("/games")
def list_games():
    return jsonify(games)
@app.post("/games")
def create():
    data = request.get_json()
    games.append({"id": len(games) + 1, **data})
    return jsonify(games[-1]), 201

Запуск: flask --app app run --debug. Режим налагодження ніколи не в інтернеті/продакшні (можливе виконання коду). Продакшн: Gunicorn/uWSGI за Nginx. Валідацію та документацію додавайте самі (або розширення: Marshmallow, Flask-RESTX).

FastAPI

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
app = FastAPI()
class GameIn(BaseModel):
    title: str = Field(min_length=1, max_length=80)
    price: float = Field(gt=0)
@app.post("/games", status_code=201)
async def create(game: GameIn):
    return {"id": 1, **game.model_dump()}
@app.get("/games/{game_id}")
async def read(game_id: int):
    if game_id != 1:
        raise HTTPException(404, "not found")
    return {"id": 1, "title": "Zelda"}

Запуск: uvicorn main:app --reload. Анотації типів + pydantic автоматично перевіряють ввід (хибний → 422 зі списком помилок); /docs (Swagger UI) і /redoc генеруються автоматично з OpenAPI. Можливий async (ASGI), впровадження залежностей (Depends), автентифікація (помічники OAuth2/JWT).

Порівняння

  • Flask: мінімальний, гнучкий, величезна екосистема, синхронний (async обмежений); добрий для навчання/невеликих сервісів/сторінок, що відображаються на сервері (Jinja).
  • FastAPI: сучасний, на типах, автоматичні валідація + документація, висока продуктивність, ідеальний для API JSON/ML-сервісів.
  • Django: ORM, адмінка, автентифікація, форми вбудовані; для більших вебзастосунків.
  • Альтернативи: Litestar, Starlette, aiohttp, Express (JS), Spring Boot (Java).
  • Розгортання: Docker, uvicorn/gunicorn, зворотний проксі, HTTPS, змінні середовища для секретів.

Безпека та практика

  • Ніколи не довіряйте вводу: перевіряйте; уникайте SQL-ін’єкцій (параметризовані запити/ORM).
  • CORS налаштовуйте свідомо, обмеження частоти запитів, автентифікація/авторизація, HTTPS, сторінки помилок без внутрішніх подробиць.
  • Секрети не в коді; журналювання без паролів.
  • Тести: TestClient (FastAPI) / app.test_client() (Flask) з pytest.
  • Структура проєкту: роутери/blueprint, шари (API → сервіс → база даних), конфігурація.
  • Модель ML як API (FastAPI + ONNX/scikit-learn) — класичний приклад.
  • Іспит/проєкт: застосовуйте принципи REST (ресурси, методи, коди стану).

Див. також: Проєктування REST API, Django, Анотації типів, OpenAPI і Swagger