Типы маршрутов в 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@Алексей_Бойко, да, спасибо, исправил.