Что такое FastAPI и зачем он нужен
easy

Что такое FastAPI и зачем он нужен

Асинхронный фреймворк для веб-приложений

Мы рассказывали про Django — популярный фреймворк, на котором написано множество современных веб-приложений, в том числе YouTube, Dropbox и Reddit. Сегодня расскажем про ещё один фреймворк, популярность которого почти сравнялась с Django, — FastAPI.

Для начала — немного теории

Мы будем говорить о фреймворках для веб-приложений, поэтому кратко вспомним все основные понятия.

Веб-приложения (веб-сервисы) — программы, которые работают через браузер: поиск Яндекса, Google-карты, онлайн-сервисы конвертации файлов. Веб-сервисы отправляют запрос на сервер, там они с ними что-то делают, а потом в виде веб-страницы возвращают результат.

Фреймворки и библиотеки — наборы готовых решений для кода. 

Фреймворки позволяют быстро создавать большие программы и сервисы, работа с ними идёт гораздо быстрее. Но написать что-то специфическое сложно, потому что нужно пользоваться тем, что придумали за вас. Это как конструктор сайтов, когда есть несколько вариантов блока с картинкой и можно использовать только их.

Библиотеки тоже добавляют готовые шаблоны кода, но менее масштабные. С библиотеками проще написать что-то своё. Это уже как кирпичики, из которых можно построить как новый фреймворк, так и использовать для создания чего-то нестандартного и нового.

API — это способ связи одной программы с другими. Если API есть, к сервису или приложению может прийти другая программа и попросить что-то сделать. Ещё API полезен потому, что без него сложно масштабировать проект. 

Допустим, вы написали веб-приложение, оно стало популярным, и вы решили сделать ещё мобильное и десктопное приложения. Без API придётся писать дополнительно две независимые кодовые базы, которые между собой никак не связаны. Каждую из них нужно отдельно развивать и поддерживать. Но можно по-другому: сразу написать API и строить всё вокруг него. В основе будет лежать вся логика бэкенда: запросы в базы данных, обработка действий пользователя и всё остальное, что понадобится. И при этом в программе будут ручки (API), за которые этот бэкенд будет дёргать любое другое приложение: веб, мобильное, десктопное. Можно прикрутить даже девайс от умного дома, если нужно.

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

Что такое FastAPI

FastAPI — это инструмент, который позволяет создавать API для нашего сервера с помощью Python. Или вообще написать полноценный сервер, завязанный чисто на API, который будет управлять всей логикой работы, — тут всё зависит от задач и масштабов.

Ещё FastAPI может работать с фронтендом — давать ему нужные данные и даже шаблоны страниц для быстрой отправки и отображения на устройстве. 

Получается, что всё, что написано на FastAPI, соединяет нескольких участников нашего веб-приложения:

  • Базу данных, где хранятся данные о пользователях, запусках, ошибках и других вещах. Баз может быть несколько и со всеми можно работать одновременно.
  • Внешние API других программ, которые могут что-то запросить у нашего приложения по интернету, например внешнее приложение спросит погоду и покажет её в своём приложении.
  • Кодовую база нашего бэкенда (возможно, полностью написанную с помощью FastAPI).
  • Веб-сервер, который часто используется в том числе для масштабирования и выравнивания нагрузки от пользователей.
  • Фронтенд — веб-страницу, через которую можно работать с приложением.

Что такое FastAPI и зачем он нужен

👉 FastAPI — центр работающего веб-приложения. Он соединяет базу данных, другие API и видимую часть нашего сервиса.

Как работает FastAPI

С технической стороны про FastAPI стоит сказать три вещи: он асинхронный, для него нужен сервер, всё основано на библиотеке Pydantic. Разберём всё по порядку.

Для асинхронности в Python есть библиотека asyncio. С ней можно писать функции, которые будут переключаться между задачами и выполнять их асинхронно, чтобы, например, запрос от одного пользователя не останавливал обработку запроса от другого. FastAPI уже знает всё про asyncio и использует её возможности в своих конструкциях (справедливости ради, нужно сказать, что не получится использовать FastAPI и не использовать асинхронный код). 

Самое простое веб-приложение на FastAPI выглядит так:

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def the_code_method():
    return {"message": "Привет, Код!"}

Для веб-приложения понадобится сервер. В FastAPI обычно используют uvicorn — это асинхронный веб-сервер для Python. 

Асинхронные Python-серверы работают по стандарту ASGI (Asynchronous Server Gateway Interface). Они переключаются между запросами от пользователей и работают с несколькими задачами одновременно.

В Django и Flask используются синхронные Python-серверы по стандарту WSGI (Web Server Gateway Interface), и они могут обрабатывать запросы только по очереди. Для ускорения работы в таких системах создают несколько параллельных потоков обработки запросов. Но количество потоков ограничено и зависит от количества ядер процессора. 

WSGI необязательно хуже ASGI. Даже с ограничениями синхронности серверы YouTube или Pinterest успешно работают с миллионами пользователей каждый день.Так выглядит запуск сервера uvicorn — после этого он становится доступен на компьютере по стандартному адресу 127.0.0.1:8000:

Что такое FastAPI и зачем он нужен

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

Например, мы можем указать, как следует заполнять форму регистрации. Для этого добавляем стандартный класс BaseModel библиотеки и вписываем всё что нужно:

from pydantic import BaseModel
# создаём пользователя
class User(BaseModel):
    # и указываем свои правила: 
    # имя должно быть строкой
    username: str
    # возраст должен быть целым числом и не меньше 18
    age: conint(gt=18)
    # устанавливаем формат для электронной почты
    email: EmailStr
    # пароль должен быть строкой от 8 до 16 символов
    password: constr(min_length=8, max_length=16)
    # телефон должен быть строкой — это необязательное поле
    phone: Optional[str] = 'Unknown'

Мы привели пример для проверки пользователя, но проверка данных внутри FastAPI будет работать везде: настройки сервера, базы данных, API.

Pydantic — одна из Python-библиотек, которые написаны на других языках для большей скорости работы (в нашем случае — на Rust). А ещё она полностью покрыта автотестами, поэтому почти на 100% защищена от внутренних ошибок.

Плюсы FastAPI

Это самый быстрый из современных популярных фреймворков для веб-разработки. Два других в тройке — Flask и Django. Это потому, что FastAPI асинхронный, а остальные — синхронные. Django и Flask при умелом обращении тоже справляются с нагрузкой, но до родной скорости FastAPI им далеко.

Также FastAPI просто освоить. Если вы уже знаете Python, то за неделю можно разобраться и написать свой бэкенд для веб-сервисов среднего уровня. С Django придётся осваиваться подольше, а Flask хоть и самый простой, но проигрывает по скорости и возможностям.

А ещё, пока вы пишете код с FastAPI, автоматически создаётся API-документация. Её можно посмотреть, зайдя по адресу 127.0.0.1:8000/docs или 127.0.0.1:8000/redoc. Адресов два, потому что документация создаётся сразу в двух сервисах: Swagger и Redoc. Выглядит это так:

Что такое FastAPI и зачем он нужен
Что такое FastAPI и зачем он нужен

Автоматическая проверка данных через Pydantic и автоматическая документация — два серьёзных плюса при масштабировании проекта. Они сокращают непредвиденные ошибки и делают код понятнее, что сильно сэкономит время и силы. 

Пока что самым популярным фреймворком в этой области считается Django, но FastAPI с ним почти сравнялся. Это не значит, что надо бросать учить Django или ставить на нём крест — просто теперь на работе бэкенд-разработчиком знание FastAPI пригодится вам с большей вероятностью. А по-хорошему надо знать оба.

Ещё FastAPI не так сильно ограничивает пользователя своими правилами, как это делают фреймворки со строгой экосистемой. Можно создавать свою архитектуру, работу с базами данных и структуру файлов и папок. А если через несколько лет появится новый фреймворк, переехать на него будет проще, потому что FastAPI не так сильно привязывает к себе, как Django.

Если он такой хороший, то почему YouTube и Mozilla до сих пор на Django?

Потому что легаси.

FastAPI появился в 2018 году, а Django — в 2005-м. Django — хорошая, стабильная, проверенная временем технология, для которой написано много таких же проверенных дополнений и расширений. У каждого из фреймворков есть то, чего нет у другого.

Ключевое преимущество FastAPI для крупных компаний в том, что он быстрее. Но за много лет работы с Django разработчики научились достигать хороших результатов в скорости и на синхронном фреймворке.

Переезд на другую технологию — это всегда трудоёмкий и затратный процесс, даже для небольших сервисов. А для таких гигантов как YouTube или Google это будет стоить ещё дороже. Если текущий фреймворк удовлетворяет все потребности, зачем тратить деньги?

Ещё крупные сервисы связаны с другими сервисами, которые работают с ними по API. Переписываешь свой продукт — остальным тоже придётся вносить изменения.

Когда стоит взять что-то другое

Если нужно быстро написать небольшое веб-приложение с минимумом функций и небольшой нагрузкой, лучше использовать другой фреймворк — Flask. Он простой и проверенный временем, и из всех современных фреймворков для веб-приложений изучить его проще всего. Для простых проектов — самое то.

Для создания чего-то по-настоящему сложного (когда уже на старте понимаешь, что это будет огромный монстр-комбайн или суперапп) лучше взять Django. У него огромное количество встроенных функций и потенциальных возможностей, которые могут пригодиться. Для хорошей скорости придётся поработать и почитать весь интернет, но достичь её возможно.

Что написано на FastAPI

Хотя полностью сменять одну технологию на другую дорого и долго, что-то новое можно внедрять постепенно. Из известных компаний FastAPI используют:

  • Microsoft,
  • Apple,
  • IBM,
  • Siemens,
  • Uber,
  • Netflix.

Всех, кто использует FastAPI, можно посмотреть на странице app.theirstack.com:

Что такое FastAPI и зачем он нужен

Как научиться

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

Если хотите изучить всё подробно, посмотрите документацию FastAPI на официальном сайте. Часть доступна на русском языке.Тем, кто хочет сразу попробовать что-то написать, можно посмотреть видеотуториалы (осторожно, Ютуб).

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Юлия Зубарева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
easy