Перейти к содержанию

История создания и дальнейшее развитие

Однажды, один из пользователей FastAPI задал вопрос:

Какова история этого проекта? Создаётся впечатление, что он явился из ниоткуда и завоевал мир за несколько недель [...]

Что ж, вот небольшая часть истории проекта.

Альтернативы

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

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

Во многом история FastAPI - история его предшественников.

Как написано в разделе Альтернативы:

FastAPI не существовал бы, если б не было более ранних работ других людей.

Они создали большое количество инструментов, которые и вдохновили меня на создание FastAPI.

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

Но в какой-то момент не осталось другого выбора, кроме как создать что-то, что предоставляло бы все эти возможности сразу. Взять самые лучшие идеи из предыдущих инструментов и, используя введённые в Python подсказки типов (которых не было до версии 3.6), объединить их.

Исследования

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

Например, стало ясно, что необходимо брать за основу стандартные подсказки типов Python, а самым лучшим подходом является использование уже существующих стандартов.

Итак, прежде чем приступить к написанию FastAPI, я потратил несколько месяцев на изучение OpenAPI, JSON Schema, OAuth2, и т.п. для понимания их взаимосвязей, совпадений и различий.

Дизайн

Затем я потратил некоторое время на придумывание "API" разработчика, который я хотел иметь как пользователь (как разработчик, использующий FastAPI).

Я проверил несколько идей на самых популярных редакторах кода среди Python-разработчиков: PyCharm, VS Code, Jedi.

Данные по редакторам я взял из опроса Python-разработчиков, который охватываает около 80% пользователей.

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

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

И все это, чтобы все пользователи могли получать наилучший опыт разработки.

Зависимости

Протестировав несколько вариантов, я решил, что в качестве основы буду использовать Pydantic и его преимущества.

По моим предложениям был изменён код этого фреймворка, чтобы сделать его полностью совместимым с JSON Schema, поддержать различные способы определения ограничений и улучшить помощь редакторов (проверки типов, автозаполнение).

В то же время, я принимал участие в разработке Starlette, ещё один из основных компонентов FastAPI.

Разработка

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

Будущее

Сейчас уже ясно, что FastAPI со своими идеями стал полезен многим людям.

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

Многие разработчики и команды уже используют FastAPI в своих проектах (включая меня и мою команду).

Но, тем не менее, грядёт добавление ещё многих улучшений и возможностей.

У FastAPI великое будущее.

И ваш вклад в это - очень ценнен.