# История, проектирование и будущее { #history-design-and-future } Некоторое время назад [один пользователь **FastAPI** спросил](https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920): > Какова история этого проекта? Кажется, что он из ниоткуда стал потрясающим за несколько недель [...] Вот небольшая часть этой истории. ## Альтернативы { #alternatives } Я несколько лет создавал API со сложными требованиями (Машинное обучение, распределённые системы, асинхронные задачи, базы данных NoSQL и т.д.), возглавляя несколько команд разработчиков. В рамках этой работы мне нужно было исследовать, тестировать и использовать многие альтернативы. Во многом история **FastAPI** — это история его предшественников. Как написано в разделе [Альтернативы](alternatives.md):
**FastAPI** не существовал бы, если бы не предыдущая работа других людей. Ещё до него было создано много инструментов, которые помогли вдохновить его создание. Я всячески избегал создания нового фреймворка в течение нескольких лет. Сначала я пытался реализовать все возможности, покрываемые **FastAPI**, используя множество различных фреймворков, плагинов и инструментов. Но в какой-то момент не осталось другого выбора, кроме как создать что-то, что предоставляло бы все эти возможности сразу, взяв лучшие идеи из предыдущих инструментов и объединив их наилучшим возможным образом, используя возможности языка, которые раньше были недоступны (аннотации типов Python 3.6+).## Исследования { #investigation } Используя все предыдущие альтернативы, я получил возможность учиться у каждой из них, брать идеи и объединять их наилучшим образом, который смог найти для себя и команд разработчиков, с которыми я работал. Например, было ясно, что в идеале всё должно основываться на стандартных аннотациях типов Python. Также наилучшим подходом было использовать уже существующие стандарты. Итак, ещё до того как начать писать код **FastAPI**, я потратил несколько месяцев на изучение спецификаций OpenAPI, JSON Schema, OAuth2 и т.п., чтобы понять их взаимосвязи, пересечения и различия. ## Проектирование { #design } Затем я потратил некоторое время на проектирование "API" разработчика, который я хотел иметь как пользователь (как разработчик, использующий FastAPI). Я проверил несколько идей в самых популярных редакторах кода Python: PyCharm, VS Code, редакторах на базе Jedi. Согласно последнему [опросу Python-разработчиков](https://www.jetbrains.com/research/python-developers-survey-2018/#development-tools), который охватывает около 80% пользователей. Это означает, что **FastAPI** был специально протестирован с редакторами кода, которыми пользуются 80% Python-разработчиков. И поскольку большинство других редакторов кода, как правило, работают аналогичным образом, все его преимущества должны работать практически для всех редакторов кода. Таким образом, я смог найти наилучшие способы максимально сократить дублирование кода, обеспечить автозавершение везде, проверки типов и ошибок и т.д. И всё это таким образом, чтобы предоставить всем разработчикам наилучший опыт разработки. ## Зависимости { #requirements } Протестировав несколько альтернатив, я решил, что буду использовать [**Pydantic**](https://pydantic.dev/docs/) из-за его преимуществ. Затем я внес в него вклад, чтобы сделать его полностью совместимым с JSON Schema, поддержать разные способы определения объявлений ограничений и улучшить поддержку редакторов кода (проверки типов, автозавершение) на основе тестов в нескольких редакторах кода. Во время разработки я также внес вклад в [**Starlette**](https://starlette.dev/), другую ключевую зависимость. ## Разработка { #development } К тому времени, когда я начал создавать сам **FastAPI**, большинство деталей уже было на своих местах, дизайн был определён, зависимости и инструменты были готовы, а знания о стандартах и спецификациях были чёткими и свежими. ## Будущее { #future } На этом этапе уже ясно, что **FastAPI** со своими идеями полезен многим людям. Его выбирают вместо предыдущих альтернатив, потому что он лучше подходит для многих вариантов использования. Многие разработчики и команды уже полагаются на **FastAPI** в своих проектах (включая меня и мою команду). Но всё ещё впереди много улучшений и возможностей. У **FastAPI** отличное будущее. И [ваша помощь](help-fastapi.md) очень ценится.