Ответ
В 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-методами.