Проблема с дефолтной областью

Проблема, которая у нас сейчас есть, это то, что все endpoints, контрольные точки, которые у нас создаются, находятся в области Default. Дефолтная область, и хотелось бы разбить все эти контрольные точки по группам, как это делается в большинстве API.

Для каждой сущности создаются свои контрольные точки. Соответственно, так мы можем более наглядно смотреть на документацию и более наглядно с ней работать.

Организация роутинга в FastAPI

Как же это сделать в FastAPI? Каким образом мы можем добиться такого эффекта?

Для решения этой задачи у нас есть такая специальная функция FastAPI, которая называется роутер. Это функция, которая позволяет организовать роутинг по нашему проекту.

Существует множество способов, как вы можете организовать такую файловую структуру для такого роутинга. Жестких ограничений в FastAPI для этого нет. Я хочу показать вам структуру, которую использую сам для возможности организации таких роутингов.

Для роутов я создаю отдельную директорию API. Все роуты, которые у меня будут использоваться в проекте, я их буду выносить в эту директорию API.

Далее создаю поддиректорию v1, то есть первая версия нашего API. Если появится вторая версия, мы сможем разрабатывать для нее новые роуты. У нас будет поддержка и первой версии API, и вторая версия API будут добавляться какие-то свои роуты. Это достаточно удобно.

Далее я создаю имя сущности, которое будет относиться к нашей контрольной точке. В данном случае у нас имя сущности test, поэтому я указываю здесь поддиректорию test.

Создаем файл с одноименным названием той сущности, с которой будем работать, например, test.py. Теперь нам потребуется сам FastAPI, и импортируем из него API-роутер.

Далее для API-роутера создаем объект router из класса API-роутер. В качестве аргументов мы можем указать тот префикс, который будет использоваться для нашей сущности. Пусть будет test, и здесь tag тоже укажем test. Потом посмотрим, на что это повлияет.

Перенос роутов и создание приложения

Теперь нам нужно перенести все роуты, которые мы создавали в предыдущих видео, в этот роутинг. Как вы видите, у нас идет здесь подчеркивание.

Во-первых, надо модель тоже сюда перенести. Подчеркивание идет из-за того, что у нас нет здесь объекта app, который мы можем использовать. В качестве app мы должны использовать router теперь. У нас появился некий класс с нашими endpoint.

Теперь нам нужно, чтобы наше FastAPI-приложение узнало об этих роутерах. Как мы это можем сделать?

Для этого нам нужно открыть файл main.py. У нашего app есть метод createApp. Мы можем создать отдельную функцию, такую как createApp, которая будет возвращать FastAPI объект, который будет содержать все необходимые роуты.

Если здесь мы создавали FastAPI, мы должны теперь его создавать здесь. Переносим его внутрь нашей функции createApp, которая будет у нас выполняться.

Теперь нам нужно импортировать наш тестовый модуль. Тест, который мы создали в этом файле. Указываем api.v1.test, то есть вот этот путь. Указываем этот файл, который мы хотим использовать.

Теперь у нас есть функция includeRouter, которая будет брать роутер из этого. Мы создали роутер, который теперь можем использовать. Мы говорим нашему приложению, что возьми этот роутер из тест-роутера.

Остается только вернуть наше приложение и создать его. Если мы обновим наше FastAPI документацию, как вы видите, теперь у нас все сгруппировалось по роутам.

У нас есть приставка test. Это тот самый префикс, который мы с вами создали. Мы можем изменить его на api. Тогда все роуты у нас будут начинаться на api.

Text это эта часть. Test, допустим, 1, 2, 3. Это лейбл этой группы роутов. Таким образом, вы можете выделить какую-то группу роутов в отдельную группу.