Skip to content

Latest commit

 

History

History
77 lines (39 loc) · 7.26 KB

history-design-future.md

File metadata and controls

77 lines (39 loc) · 7.26 KB

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

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

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

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

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

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

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

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

Как написано в разделе Альтернативы{.internal-link target=_blank}:

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 великое будущее.

И ваш вклад в это{.internal-link target=_blank} - очень ценнен.