Мы завершили операции пути для маршрута category. Следующим шагом является передача этих маршрутов в главный файл, чтобы мы могли протестировать определенные операции пути. Класс APIRouter работает так же, как и класс FastAPI. Однако uvicorn не может использовать экземпляр APIRouter для обслуживания приложения, в отличие от FastAPI.
Маршруты, определенные с помощью класса APIRouter, добавляются в экземпляр FastAPI для обеспечения их видимости.
Для этого существует метод include_router(), который отвечает за добавление маршрутов, определенных с помощью класса APIRouter, в экземпляр основного приложения, чтобы сделать маршруты видимыми.
В файл main.py добавим следующий код:
from fastapi import FastAPI
from app.routers import category
app = FastAPI()
@app.get("/")
async def welcome() -> dict:
return {"message": "My e-commerce app"}
app.include_router(category.router)
В этом файле мы импортируем наши маршруты from app.routers import category и подключаем их через app.include_router(category.router)
Запустим сервер через команду uvicorn app.main:app --reload и проверим работу перейдя в документацию:
Мы видим что наши маршруты для категорий успешно были добавлены, и при этом сгруппированы в документации, так как мы используем tags=['category']
По аналогии напишем маршруты раздела товаров, для этого в файл products.py добавим следующий код:
from fastapi import APIRouter
router = APIRouter(prefix='/products', tags=['products'])
@router.get('/')
async def all_products():
pass
@router.post('/create')
async def create_product():
pass
@router.get('/{category_slug}')
async def product_by_category(category_slug: str):
pass
@router.get('/detail/{product_slug}')
async def product_detail(product_slug: str):
pass
@router.put('/detail/{product_slug}')
async def update_product(product_slug: str):
pass
@router.delete('/delete')
async def delete_product(product_id: int):
pass
В файл products.py мы добавили следующие пути:
- Метод получения всех товаров
- Метод создания товара
- Метод получения товаров определенной категории
- Метод получения детальной информации о товаре
- Метод изменения и удаления товара
Теперь давайте подключим пути определенных с помощью класса APIRouter, в экземпляр основного приложения, чтобы сделать маршруты видимыми.
from fastapi import FastAPI
from app.routers import category, products
app = FastAPI()
@app.get("/")
async def welcome() -> dict:
return {"message": "My e-commerce app"}
app.include_router(category.router)
app.include_router(products.router)
Запустим сервер командой uvicorn app.main:app --reload, и мы увидим что наши маршруты были добавлены, при этом они сгруппированы по тегу.
Последнее, что нам необходимо, это создать модели для наших категорий и товаров, чем мы и займемся в следующем шаге