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