Плюсы и минусы FastAPI в 2023

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Всем привет, меня зовут Абай. Я являюсь Back-End разработчиком в 13LAB.

После прочтения интересной статьи со сравнением NodeJS и FastAPI, у меня появилось желание высказать свое личное мнение об удобстве разработки бэкенда на Python и фреймворке FastAPI. В данной статье будут описаны мои личные ощущения, поэтому мое мнение может отличаться от вашего.

FastAPI - является легковесным асинхронным фреймворком для Python, который используют преимущественно для разработки API-сервисов. Фреймворк довольно молодой и существует всего лишь 5 лет. До 2021 года не имел большой популярности по сравнению с Flask и Django, но на данный момент уже стал намного востребованнее, что его стали использовать в МAANG компаниях (к примеру, Netflix). Создателем фреймворка является Sebastián Ramírez Montaño, разработав на базе микрофреймворка Starlette, в отличии от которого предоставляет больший функционал из коробки, что освобождает разработчиков от некоторой рутины.

Плюсы разработки на FastAPI:

  1. Скорость работы. FastAPI обходит все Python-фреймворки по производительности (по данным TechEmpower)

     Бенчмаркинг с TechEmpower
    Бенчмаркинг с TechEmpower
  2. Гибкость на уровне Flask. У вас нет какой-либо утвержденной архитектуры, что дает волю вашей фантазии и различным подходам разработки, по сравнению с Django (использует MVC), в котором проект часто превращается в странную субстанцию из папок в папках.

  3. Автоматическая OpenAPI документация. В Django и Flask, нужно подключать отдельные пакеты и создавать специальные классы для подключения документации к ним. Еще замечу, что к Flask очень мало информации на эту тему, а сама версия документации зачастую устаревшая. На Django это сделать уже намного проще, но также занимает некоторое время, в то же время в FastAPI все доступно из коробки.

  4. Асинхронность. FastAPI использует ASGI-сервера по умолчанию, когда в том же Django нужно заниматься конфигурацией приложения с WSGI на ASGI, что занимает достаточно времени. Flask, к сожалению, не поддерживает асинхронность и работает лишь под WSGI.

  5. Встроенная валидация данных. Недавно вышла поддержка Pydantic V2 в FastAPI, что ускоряет валидацию данных в 20 раз. Pydantic предоставляет готовые типы данных для валидации email, uuid, url и т.д. Вместо того, чтобы вручную писать проверки для содержимого json-файлов и обрабатывать ошибки валидации, он автоматизирует эти процессы.

  6. Проработанная документация. В случае других фреймворков и библиотек приходится смотреть обучающие ролики из-за невнятной и громоздкой документации. У FastAPI таких проблем нет. Документация разделена на две части: для новичков и более продвинутых разработчиков. В ней большое количество примеров и лучших практик, что также является несомненным плюсом.

Минусы разработки FastAPI:

  1. Мало информации. Это относится к JWT-токенам, S3 облачным хранилищам, сборке образа в Docker Compose и другим технологиям. Зачастую вам приходится изучать реализации на других фреймворках, так как информации не все всегда бывает достаточно в документации FastAPI.

  2. Плохая реализация асинхронных библиотек. У асинхронных библиотек на Python зачастую нечитабельная документация, из-за чего их подключении к FastAPI иногда отнимает кучу времени. Часто это проявляется, когда приходится использовать асинхронные драйвера или ORM для баз данных. В AsyncIOMotor (асинхронный драйвер для MongoDB) не работают тайпхинты, которые подсказывают, как прописываются методы, из-за чего неоднократно возвращаешься к документации, потому, что не можешь правильно написать название метода. В AsyncSQLAlchemy (асихронный ORM для SQL) есть неприятный момент в том, что метод .query() не является асинхронным и приходится прописывать все через.execute(),как и другие методы:.select(), .update(), .delete(), хотя это уже больше дело привычки.

  3. Нет удобной смены root_path. У меня никак не получалось его сменить с (“/”) на (“/api”), сколько не пытался прописывать в атрибутах самого объекта и менять настройки uvicorn. Единственный рабочий метод, который я обнаружил, это создавать объект класса APIRouter() и прописывать внутри атрибута prefix нужное вам значение, чтоб изменить начальную точку, но это надо делать во всех объектах, что очень неудобно.

    # Как работает
    app = FastAPI(docs_url="/api/docs", redoc_url="/api/redoc", openapi_url="/api/openapi.json")
    
    # Как хотелось бы
    app = FastAPI(root_path = "/api")
  4. Трудоустройство в СНГ. Вакансий для разработчиков на FastAPI все же мало на рынке, по сравнению с давно устоявшимися фреймворками, как Django, DRF и Flask, из-за чего проблематично найти работу. Понятное дело, что никто не хочет переписывать старые монолиты и сервисы, поскольку недостаточно хороших специалистов на рынке, которые умеют на нем писать.

Подведем итоги. FastAPI является одним из самых производительных и комфортных инструментов для веб-разработки на Python, а основные его недостатки проявляются лишь в отсутствии нужного количества информации, из-за его новизны.

Спасибо за помощь в оформлении статьи - @zaurbbb

Источник: https://habr.com/ru/articles/748552/


Интересные статьи

Интересные статьи

В данной статье мы обсудим новые возможности работы с массивами в JavaScript, которые были добавлены в ES2023.
Из новостей: первый релиз-кандидат Godot 4, VK Play выделил 300 миллионов рублей на поддержку российских разработчиков игр, опенсорсная имплементация Fallout позволяет играть на мобилках, Godot Edit...
Как так оказалось, что стартап решил поменять стек? Это же затраты и все возникающие при этом сложности переезда. Но если хочешь получить короткий, эргономичный, хорошо читаемый код, приходится идти н...
Недавно в сети были опубликованы результаты эксперимента по сокращению рабочей недели в Исландии. Поскольку население страны небольшое, даже эксперименты национального уровня можно пров...
Обзор составлен в первую очередь для владельцев интернет-магазинов. Цель обзора - предоставить объективную оценку (насколько это возможно) проверенных способов продвижени...