Всем привет! Меня зовут Данил, я являюсь руководителем направления разработки систем технического учета сети InfraMirror в компании Napa Labs.
Сейчас мы работаем над разработкой системы для технического учета сетевой инфраструктуры InfraMirror. Система предназначена для создания цифровых двойников инфраструктуры предприятий и отображение их сложных пространственных данных.
В этой статье я хочу поделиться нашим опытом миграции backend с Django (DRF) на FastAPI — решением, которое изначально казалось неочевидным, но в итоге полностью оправдало себя.

Начало пути: почему мы выбрали Django (DRF) в качестве фреймворка для Backend.
При старте проекта наш выбор пал на Django, и тому было несколько веских причин:
- Всеобъемлющая экосистема — огромное количество проверенных библиотек, избавляющих от необходимости изобретать велосипед.
- Огромное сообщество — бесценный ресурс в виде документации, статей и готовых решений.
- Знакомая территория — накопленный командой опыт работы с этим фреймворком.
Трещины в фундаменте: когда Django (DRF) перестал отвечать нашим потребностям
По мере развития проекта мы столкнулись с рядом трудностей:
- Обратная сторона богатой экосистемы. Многие библиотеки, вместо того чтобы расширять возможности, неожиданно стали источником ограничений. Мы постоянно упирались в рамки, заданные их архитектурой.
- Проблемы с производительностью. Django (DRF) исторически ориентированы на синхронную модель, что делает их сложными для эффективного выполнения асинхронных задач. Это становится особенно критичным в условиях растущих требований к производительности приложений.
Проблемы асинхронности в Django и DRF:
- Сложность внедрения асинхронности. В то время как Django 3.1 и выше добавил поддержку асинхронных представлений и маршрутизаторов, полное использование асинхронных возможностей требует пересмотра многих аспектов проекта. Необходимость разделения синхронного и асинхронного кода добавляет сложности и требует дополнительных усилий для поддержания экосистемы.
- Ограниченная поддержка ORM. Django ORM был создан для работы в синхронном контексте. То есть, даже если у вас есть асинхронные представления, выполнение запросов к базе данных по-прежнему будет блокирующим. Это может привести к узким местам, особенно когда приложение требует высокой доступности и производительности в сценариях с большим числом пользователей.
- Проблемы с Middleware и сторонними библиотеками. Множество библиотек и middleware для Django все еще не поддерживают асинхронный код. Это может привести к несоответствиям и блокировкам при смешении синхронного и асинхронного кода. Это создает дополнительные сложности в использовании существующих решений и их интеграции в проект.
Почему выбор пал на FastAPI
В последние годы выбор фреймворка для разработки веб-приложений стал критически важным решением, влияющим на производительность, скорость разработки и поддержку проекта в долгосрочной перспективе. После тщательного анализа различных технологий и потребностей нашего приложения, мы обратили внимание на FastAPI. Рассмотрим ключевые причины, по которым мы решили выбрать этот фреймворк.
Асинхронная природа
FastAPI полностью поддерживает асинхронные операции, позволяя легко справляться с многопоточностью и улучшать производительность при работе с долгими I/O операциями, такими как запросы к базе данных или внешним API. Это стало ключевым фактором для нашего приложения, где важно быстро обрабатывать большое количество параллельных запросов без блокировок.
FastAPI полностью поддерживает асинхронные операции, позволяя легко справляться с многопоточностью и улучшать производительность при работе с долгими I/O операциями, такими как запросы к базе данных или внешним API. Это стало ключевым фактором для нашего приложения, где важно быстро обрабатывать большое количество параллельных запросов без блокировок.
Простота и интуитивность
FastAPI предлагает разработчикам интуитивно понятный интерфейс с использованием аннотаций типов Python. Это значительно упрощает написание кода и позволяет избежать частых ошибок, связанных с типами данных. Благодаря чистому и понятному синтаксису нам удалось быстро приступить к разработке, минимизировав время на изучение документации и внутренней структуры.
FastAPI предлагает разработчикам интуитивно понятный интерфейс с использованием аннотаций типов Python. Это значительно упрощает написание кода и позволяет избежать частых ошибок, связанных с типами данных. Благодаря чистому и понятному синтаксису нам удалось быстро приступить к разработке, минимизировав время на изучение документации и внутренней структуры.
Встроенная документация
Одним из наиболее привлекательных аспектов FastAPI является возможность автоматической генерации документации на базе OpenAPI. Это делает процесс разработки более прозрачным и удобным, поскольку мы можем быстро получить доступ к описанию нашего API без необходимости вручную поддерживать документацию. Это особенно полезно для команды разработчиков, позволяя нам всегда иметь актуальную информацию о конечных точках и их параметрах.
Одним из наиболее привлекательных аспектов FastAPI является возможность автоматической генерации документации на базе OpenAPI. Это делает процесс разработки более прозрачным и удобным, поскольку мы можем быстро получить доступ к описанию нашего API без необходимости вручную поддерживать документацию. Это особенно полезно для команды разработчиков, позволяя нам всегда иметь актуальную информацию о конечных точках и их параметрах.
Гибкость и расширяемость
FastAPI обеспечивает большую гибкость в проектировании и архитектуре приложений. Он интегрируется с множеством сторонних библиотек, таких как SQLAlchemy и Tortoise ORM, что позволяет нам выбирать наиболее подходящие инструменты для работы с базами данных. Эта возможность расширять функционал и настраивать приложение под конкретные нужды является важным фактором при выборе фреймворка.
FastAPI обеспечивает большую гибкость в проектировании и архитектуре приложений. Он интегрируется с множеством сторонних библиотек, таких как SQLAlchemy и Tortoise ORM, что позволяет нам выбирать наиболее подходящие инструменты для работы с базами данных. Эта возможность расширять функционал и настраивать приложение под конкретные нужды является важным фактором при выборе фреймворка.
Заключение
Ну и в завершении хочется добавить, что Django — мощный Фреймворк с богатой экосистемой, но его преимущества не всегда оправданы в проектах с определёнными требованиями. В нашем случае, ключевыми проблемами стали отсутствие гибкости, слабая поддержка асинхронности. FastAPI оказался лучшим выбором благодаря нативной асинхронности, гибкости и расширяемости и поддержки встроенной автодокументации. Не всегда самое популярное и знакомое решение является самым правильным.