История, проектирование и будущее¶
🌐 Перевод выполнен с помощью ИИ и людей
Этот перевод был сделан ИИ под руководством людей. 🤝
В нем могут быть ошибки из-за неправильного понимания оригинального смысла или неестественности и т. д. 🤖
Вы можете улучшить этот перевод, помогая нам лучше направлять ИИ LLM.
Некоторое время назад один пользователь FastAPI спросил:
Какова история этого проекта? Кажется, что он из ниоткуда стал потрясающим за несколько недель [...]
Вот небольшая часть этой истории.
Альтернативы¶
Я несколько лет создавал API со сложными требованиями (Машинное обучение, распределённые системы, асинхронные задачи, базы данных NoSQL и т.д.), возглавляя несколько команд разработчиков.
В рамках этой работы мне нужно было исследовать, тестировать и использовать многие альтернативы.
Во многом история 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 отличное будущее.
И ваша помощь очень ценится.