3.1 Проектирование и реализация REST API (GET, POST, PUT, DELETE)
9 из 9 шагов пройдено
3 из 3 баллов  получено

Типы маршрутов в FastAPI

Декоратор @app позволяет устанавливать метод, используемый для маршрута, например, @app.getили @app.post. Таким образом поддерживаются методы GET, POST, PUT, DELETE, а также менее используемые OPTIONS, HEAD, PATCH, TRACE.

В предыдущих разделах, мы создавали маршруты для наших операций используя GET запросы. Давайте ознакомимся с остальными из них, и разберем их подробнее.

Вы также можете создавать несколько методов на одном маршруте. Для этого нужно просто обернуть несколько функций маршрутизации, например @app.get("/") для одной функции и @app.post("/") для другой.

Все декораторы запросов могут принимать следующие параметры:

    path,
    *,
    response_model=Default(None),
    status_code=None,
    tags=None,
    dependencies=None,
    summary=None,
    description=None,
    response_description="Successful Response",
    responses=None,
    deprecated=None,
    operation_id=None,
    response_model_include=None,
    response_model_exclude=None,
    response_model_by_alias=True,
    response_model_exclude_unset=False,
    response_model_exclude_defaults=False,
    response_model_exclude_none=False,
    include_in_schema=True,
    response_class=Default(JSONResponse),
    name=None,
    callbacks=None,
    openapi_extra=None,
    generate_unique_id_function=Default(generate_unique_id)

Пока мы передаем только параметр path, но с некоторыми параметрами мы познакомимся далее по курсу.

Создадим новый проект для нашего CRUD проекта, в котором добавим файл crud.py. Не забываем установить FastAPI и Uvicorn:

pip install fastapi

pip install "uvicorn[standard]"

Давайте первым делом создадим макет нашего проекта. Мы добавим функцию для получения всех данных, получения данных по идентификатору, добавления данных, удаления данных по идентификатору, удаления всех данных и функцию изменения данных.

Начнем написания каркаса нашего приложения:

from fastapi import FastAPI

app = FastAPI()


messages_db = {"0": "First post in FastAPI"}


@app.get("/")
async def get_all_messages() -> dict:
    pass


@app.get("/message/{message_id}")
async def get_message(message_id: str) -> str:
    pass


@app.post("/message")
async def create_message(message: str) -> str:
    pass


@app.put("/message/{message_id}")
async def update_message(message_id: str, message: str) -> str:
    pass


@app.delete("/message/{message_id}")
async def delete_message(message_id: str) -> str:
    pass


@app.delete("/")
async def kill_message_all() -> str:
    pass

Давайте разберем наш код подробнее, первым делом мы добавили переменную messages_db, которая содержит в себе словарь. В котором ключом словаря является id записи, а значением сам текст записи. На данный момент этот словарь будет выполнять функцию базы данных.

Далее мы объявляем следующие функции:

  • get_all_messages() Функция ничего не принимает и обернута в декоратор GET запроса по корневому адресу приложения. Она будет выводить все записи из словаря messages_db.
  • get_message() Функция принимает message_id записи из параметра пути и обернута в декоратор GET запроса. При запросе по адресу /message/{id} будет выводить запись из словаря messages_db с принятым message_id.
  •  create_message()  Функция обернута в декоратор POST запроса и принимает текст (переменная message) из запроса. Она будет добавлять новую запись при POST запросе по пути /message
  • update_message() Функция принимает message_id записи из параметра пути и обернута в декоратор PUT запроса. Она будет изменять запись, получая message_id записи из параметра пути и текст(переменная message) из запроса.
  • delete_message() Функция принимает message_id записи из параметра пути и обернута в декоратор DELETE запроса. Она будет удалять запись из словаря messages_db с принятым message_id.
  • kill_message_all()  Функция ничего не принимает, и обернута в декоратор DELETE запроса. При запросе к ней, будет полностью очищаться наш словарь messages_db.

В следующем шаге мы приступим к написанию логики в наших функциях. 


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.

"Давайте разберем наш код подробнее, первым делом мы добавили переменную messages"(C) мне кажется, имя переменной messages_db

@Алексей_Бойко, да, спасибо, исправил.