committed by
GitHub
2 changed files with 78 additions and 0 deletions
@ -0,0 +1,77 @@ |
|||||
|
# История создания и дальнейшее развитие |
||||
|
|
||||
|
Однажды, <a href="https://github.com/tiangolo/fastapi/issues/3#issuecomment-454956920" class="external-link" target="_blank">один из пользователей **FastAPI** задал вопрос</a>: |
||||
|
|
||||
|
> Какова история этого проекта? Создаётся впечатление, что он явился из ниоткуда и завоевал мир за несколько недель [...] |
||||
|
|
||||
|
Что ж, вот небольшая часть истории проекта. |
||||
|
|
||||
|
## Альтернативы |
||||
|
|
||||
|
В течение нескольких лет я, возглавляя различные команды разработчиков, создавал довольно сложные API для машинного обучения, распределённых систем, асинхронных задач, баз данных NoSQL и т.д. |
||||
|
|
||||
|
В рамках работы над этими проектами я исследовал, проверял и использовал многие фреймворки. |
||||
|
|
||||
|
Во многом история **FastAPI** - история его предшественников. |
||||
|
|
||||
|
Как написано в разделе [Альтернативы](alternatives.md){.internal-link target=_blank}: |
||||
|
|
||||
|
<blockquote markdown="1"> |
||||
|
|
||||
|
**FastAPI** не существовал бы, если б не было более ранних работ других людей. |
||||
|
|
||||
|
Они создали большое количество инструментов, которые и вдохновили меня на создание **FastAPI**. |
||||
|
|
||||
|
Я всячески избегал создания нового фреймворка в течение нескольких лет. Сначала я пытался собрать все нужные возможности, которые ныне есть в **FastAPI**, используя множество различных фреймворков, плагинов и инструментов. |
||||
|
|
||||
|
Но в какой-то момент не осталось другого выбора, кроме как создать что-то, что предоставляло бы все эти возможности сразу. Взять самые лучшие идеи из предыдущих инструментов и, используя введённые в Python подсказки типов (которых не было до версии 3.6), объединить их. |
||||
|
|
||||
|
</blockquote> |
||||
|
|
||||
|
## Исследования |
||||
|
|
||||
|
Благодаря опыту использования существующих альтернатив, мы с коллегами изучили их основные идеи и скомбинировали собранные знания наилучшим образом. |
||||
|
|
||||
|
Например, стало ясно, что необходимо брать за основу стандартные подсказки типов Python, а самым лучшим подходом является использование уже существующих стандартов. |
||||
|
|
||||
|
Итак, прежде чем приступить к написанию **FastAPI**, я потратил несколько месяцев на изучение OpenAPI, JSON Schema, OAuth2, и т.п. для понимания их взаимосвязей, совпадений и различий. |
||||
|
|
||||
|
## Дизайн |
||||
|
|
||||
|
Затем я потратил некоторое время на придумывание "API" разработчика, который я хотел иметь как пользователь (как разработчик, использующий FastAPI). |
||||
|
|
||||
|
Я проверил несколько идей на самых популярных редакторах кода среди Python-разработчиков: PyCharm, VS Code, Jedi. |
||||
|
|
||||
|
Данные по редакторам я взял из <a href="https://www.jetbrains.com/research/python-developers-survey-2018/#development-tools" class="external-link" target="_blank">опроса Python-разработчиков</a>, который охватываает около 80% пользователей. |
||||
|
|
||||
|
Это означает, что **FastAPI** был специально проверен на редакторах, используемых 80% Python-разработчиками. И поскольку большинство других редакторов, как правило, работают аналогичным образом, все его преимущества должны работать практически для всех редакторов. |
||||
|
|
||||
|
Таким образом, я смог найти наилучшие способы сократить дублирование кода, обеспечить повсеместное автодополнение, проверку типов и ошибок и т.д. |
||||
|
|
||||
|
И все это, чтобы все пользователи могли получать наилучший опыт разработки. |
||||
|
|
||||
|
## Зависимости |
||||
|
|
||||
|
Протестировав несколько вариантов, я решил, что в качестве основы буду использовать <a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">**Pydantic**</a> и его преимущества. |
||||
|
|
||||
|
По моим предложениям был изменён код этого фреймворка, чтобы сделать его полностью совместимым с JSON Schema, поддержать различные способы определения ограничений и улучшить помощь редакторов (проверки типов, автозаполнение). |
||||
|
|
||||
|
В то же время, я принимал участие в разработке <a href="https://www.starlette.io/" class="external-link" target="_blank">**Starlette**</a>, ещё один из основных компонентов FastAPI. |
||||
|
|
||||
|
## Разработка |
||||
|
|
||||
|
К тому времени, когда я начал создавать **FastAPI**, большинство необходимых деталей уже существовало, дизайн был определён, зависимости и прочие инструменты были готовы, а знания о стандартах и спецификациях были четкими и свежими. |
||||
|
|
||||
|
## Будущее |
||||
|
|
||||
|
Сейчас уже ясно, что **FastAPI** со своими идеями стал полезен многим людям. |
||||
|
|
||||
|
При сравнении с альтернативами, выбор падает на него, поскольку он лучше подходит для множества вариантов использования. |
||||
|
|
||||
|
Многие разработчики и команды уже используют **FastAPI** в своих проектах (включая меня и мою команду). |
||||
|
|
||||
|
Но, тем не менее, грядёт добавление ещё многих улучшений и возможностей. |
||||
|
|
||||
|
У **FastAPI** великое будущее. |
||||
|
|
||||
|
И [ваш вклад в это](help-fastapi.md){.internal-link target=_blank} - очень ценнен. |
Loading…
Reference in new issue