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:
- Асинхронный
- Типизированный
- Встроенная документация
Как программист, я всегда думаю, что ваша структура работает ровно настолько, насколько быстро вы пишете код. Вот почему скорость - то, что FastAPI довольно хорошо продает на своем веб-сайте - в этой статье не обсуждается. То же самое относится к ошибкам, скорости кодирования и т.д. Мне эти показатели трудно измерить. Вы можете легко сравнить яблоки с апельсинами.
Если честно, вы можете писать невероятно быстрые приложения как во Flask, так и в FastAPI. Если вы можете улучшить свое приложение с помощью асинхронного программирования, почему бы и нет?