Как в FastAPI определить и обработать HTTP-метод запроса

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

Ответ

В FastAPI маршрутизация запросов на основе HTTP-метода (GET, POST, PUT и т.д.) выполняется с помощью специальных декораторов. Это основной и наиболее декларативный способ.

1. Основной способ: Декораторы методов

Каждому HTTP-методу соответствует свой декоратор (@app.get, @app.post, @app.put, @app.delete и т.д.), который связывает URL-путь с функцией-обработчиком.

from fastapi import FastAPI

app = FastAPI()

# Этот обработчик будет вызван только для GET-запросов к /items/
@app.get("/items/")
async def read_items():
    return {"method": "GET"}

# Этот обработчик — только для POST-запросов к /items/
@app.post("/items/")
async def create_item():
    return {"method": "POST"}

2. Получение метода в процессе выполнения

Если необходимо узнать метод внутри самой функции (например, для логирования или сложной логики), можно использовать зависимость Request.

from fastapi import FastAPI, Request

app = FastAPI()

@app.api_route("/some-path", methods=["GET", "POST"]) # Обрабатывает несколько методов
async def handle_request_dynamically(request: Request):
    # request.method содержит строку с названием HTTP-метода, например, "GET"
    if request.method == "POST":
        # Логика для создания ресурса
        return {"message": f"Handling a {request.method} request"}

    # Логика по умолчанию для GET
    return {"message": f"Handling a {request.method} request"}

Таким образом, FastAPI предоставляет как статический (декораторы), так и динамический (Request объект) способы работы с HTTP-методами.