DevGang
Авторизоваться

3 причины перейти на FastAPI 

Мы живем в мире после Python 2, поскольку большинство компаний адаптировалось к Python 3. Язык становится более зрелым. В последнее время Python перенимает интересные вещи из других языков. Несколько примеров - это подсказки по типам и синтаксис async/await.

Из-за этих изменений в языке Python пришло время обсудить нового зверя в городе: FastAPI. Давайте рассмотрим три преимущества выбора FastAPI перед Flask, основываясь на моем опыте использования обоих в течение нескольких месяцев.

Прочитав эту статью, вы поймете, когда следует переключаться.

Асинхронный

Синтаксис async/await является тем, что недавно было введено в Python. Большинство программистов думают, что это все ускорит. Это не совсем так, поскольку синхронный код подходит для большинства сценариев. async/await это очень удобный способ написания асинхронного кода.

С точки зрения программирования API это очень интересно. Мы видим растущую потребность в асинхронных задачах, таких как организация очередей, WebSockets и т.д. В отличие от Flask, FastAPI реализован на ASGI и позволяет создавать как асинхронные, так и синхронные приложения изначально.

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

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

get('A picture of a cat') // first
get('A picture of a dog') // second
get('A picture of a bat') // third

Однако представьте, что этот API доступен всему миру и пользователи его используют. Представьте, что обработка каждого запущенного запроса занимает 300 миллисекунд. Когда 50 запросов отправляются одновременно в синхронном мире, последний запрос будет завершен через 15 секунд.

Внезапно ваш API стал медленным. Вы можете масштабировать его, используя несколько потоков и прочее, но не намного. В конце концов, это довольно быстро усложняется. По сути, каждый поток, выполняющий эту задачу, тратит 300 миллисекунд в ожидании ничего.

Асинхронное программирование предлагает улучшения. Asyncio позволяет вам дождаться завершения процесса и одновременно выполнять некоторые другие вычисления с тем же потоком. Больше не нужно ждать! 50 запросов? Нет проблем. Мы отправляем их всех, одного за другим. Вы можете видеть это как один поток, имеющий несколько стеков вызовов.

Пока базовая инфраструктура может справиться с этим, мы в порядке. В этом крайнем случае мы даже можем сократить время ожидания до чуть более 300 миллисекунд для всех запросов. Ты понял? Если нет, посмотрите это видео:

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

Подсказки на основе типов

FastAPI основан на подсказках типов. До этого момента Flask их просто игнорировал. Подсказки типа дают нам большую читабельность. В любой момент времени мы точно знаем, с каким типом работаем. Это очень ценно. Хотя это обычная практика для других языков, таких как Java и TypeScript, это новое и приятное дополнение к языку Python.

Промышленность адаптируется. Как никогда ранее, Python используется не только как язык для быстрого написания сценариев. Все больше и больше команд работают вместе, записные книжки делятся друг с другом, пишется больше тестов, чем когда-либо прежде. Сегодня даже интерфейсный мир пишет тесты (не обижайтесь, если вы принадлежите к нему). Развитие рассматривается как ремесло, и так должно быть.

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

Встроенный OpenAPI

Когда вы программист, вы, вероятно, знакомы с API. В конце концов, нам нужно поделиться своими конечными точками с нашими конечными пользователями, чтобы они знали, как они могут взаимодействовать с услугами, которые вы предлагаете.

FastAPI имеет встроенные OpenAPI (Swagger) и Redoc. Это хорошее дополнение, которое FastAPI предлагает вместо Starlette, на котором он основан. Flask также не имеет встроенного OpenAPI, и поэтому вам понадобится дополнительная библиотека для выполнения тех же задач.

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

Вывод

В этой статье мы обсудили три важные причины выбрать FastAPI вместо Flask:

  1. Асинхронный
  2. Типизированный
  3. Встроенная документация

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

Если честно, вы можете писать невероятно быстрые приложения как во Flask, так и в FastAPI. Если вы можете улучшить свое приложение с помощью асинхронного программирования, почему бы и нет?

Источник:

#Flask #Python #FastAPI
Комментарии 2
Spirit412 12.11.2020 в 16:25

Попробовал Удобно что сразу из коробки pydantic, сваггер Не получилось прикрутить jwt авторизацию. Мало информации и примеров в доках. Нет примеров с куками. Нашел примеры от апреля 20г, но они уже не рабочие т.к. сейчас ноябрь, и FastAPI сильно поменялся. Доки поменялись Остался на Flask. Но буду следить за FastAPI.

LegGnom 14.11.2020 в 22:59

Про авторизацию могу написать статейку, она довольно просто врубается в ReDoc/Swagger

A вообще, мы большое проект на нем делаем, полет более чем нормальный. Есть некоторое неудобство с БД но думаю мы просто не докурили доки. Самый большой плюс для нас это то что он написан на CPython и довольно легко в PyInstaller собирается.

Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу