Как FastAPI обрабатывает маршрутизацию запросов

«Как FastAPI обрабатывает маршрутизацию запросов» — вопрос из категории Библиотеки и модули, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

FastAPI использует декораторы для привязки HTTP-запросов к функциям-обработчикам. В основе лежит Starlette, который обеспечивает высокопроизводительную маршрутизацию.

Ключевой принцип: Декоратор @app.<method>("/path") связывает HTTP-метод (GET, POST и т.д.) и URL-путь с асинхронной или синхронной функцией.

Пример:

from fastapi import FastAPI
from typing import Optional

app = FastAPI()

# 1. Параметр пути (path parameter)
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Optional[str] = None):
    # item_id - обязательный параметр из URL
    # q - опциональный query-параметр (?q=...)
    return {"item_id": item_id, "q": q}

# 2. POST-запрос с телом (request body)
@app.post("/items/")
async def create_item(item: dict):
    return {"item_created": item}

Как это работает:

  1. Декораторы: @app.get, @app.post, @app.put и т.д. регистрируют функцию для конкретного пути и HTTP-метода.
  2. Тайп-хинтинг: FastAPI использует аннотации типов Python для валидации, сериализации и документирования данных. Например, item_id: int автоматически преобразует параметр пути в целое число и вернет ошибку 422, если это невозможно.
  3. Pydantic: Тела запросов (item: dict или, что лучше, модель Pydantic) автоматически парсятся из JSON и валидируются.
  4. APIRouter: Для структурирования больших приложений маршруты можно группировать с помощью APIRouter и подключать к основному приложению.
  5. Авто-документация: На основе этих маршрутов и моделей данных FastAPI автоматически генерирует интерактивную документацию OpenAPI (Swagger UI) и ReDoc.