OpenAPI для создания API, включая объявления операций пути, параметров, тела запроса, безопасности и т.д.
Автоматическое документирование моделей данных в соответствии с JSON Schema (так как спецификация OpenAPI сама основана на JSON Schema).
Разработан, придерживаясь этих стандартов, после тщательного их изучения. Эти стандарты изначально включены во фреймфорк, а не являются дополнительной надстройкой.
Это также позволяет использовать автоматическую генерацию клиентского кода на многих языках.
Интерактивная документация для API и исследования пользовательских веб-интерфейсов. Поскольку этот фреймворк основан на OpenAPI, существует несколько вариантов документирования, 2 из которых включены по умолчанию.
Swagger UI, с интерактивным взаимодействием, вызывает и тестирует ваш API прямо из браузера.
Все эти возможности основаны на стандартных аннотациях типов Python 3.8 (благодаря Pydantic). Не нужно изучать новый синтаксис. Только лишь стандартный современный Python.
Если вам нужно освежить знания, как использовать аннотации типов в Python (даже если вы не используете FastAPI), выделите 2 минуты и просмотрите краткое руководство: Введение в аннотации типов Python¶
.
Вы пишете на стандартном Python с аннотациями типов:
fromdatetimeimportdatefrompydanticimportBaseModel# Объявляем параметр user_id с типом `str`# и получаем поддержку редактора внутри функцииdefmain(user_id:str):returnuser_id# Модель PydanticclassUser(BaseModel):id:intname:strjoined:date
Передать ключи и значения словаря second_user_data, в качестве аргументов типа "ключ-значение", это эквивалентно: User(id=4, name="Mary", joined="2018-11-30") .
Весь фреймворк был продуман так, чтобы быть простым и интуитивно понятным в использовании, все решения были проверены на множестве редакторов еще до начала разработки, чтобы обеспечить наилучшие условия при написании кода.
Вы будете получать автодополнение кода даже там, где вы считали это невозможным раньше.
Как пример, ключ price внутри тела JSON (который может быть вложенным), приходящего в запросе.
Больше никаких неправильных имён ключей, метания по документации или прокручивания кода вверх и вниз, в попытках узнать - использовали вы ранее username или user_name.
FastAPI имеет продуманные значения по умолчанию для всего, с произвольными настройками везде. Все параметры могут быть тонко подстроены так, чтобы делать то, что вам нужно и определять необходимый вам API.
Встроеные функции безопасности и аутентификации. Без каких-либо компромиссов с базами данных или моделями данных.
Все схемы безопасности, определённые в OpenAPI, включая:
HTTP Basic.
OAuth2 (также с токенами JWT). Ознакомьтесь с руководством OAuth2 с JWT.
Ключи API в:
Заголовках.
Параметрах запросов.
Cookies и т.п.
Вдобавок все функции безопасности от Starlette (включая сессионные cookies).
Все инструменты и компоненты спроектированы для многократного использования и легко интегрируются с вашими системами, хранилищами данных, реляционными и NoSQL базами данных и т. д.
Или, другими словами, нет сложностей с ними, импортируйте и используйте нужный вам код.
Любая интеграция разработана настолько простой в использовании (с зависимостями), что вы можете создать "плагин" для своего приложения в пару строк кода, используя ту же структуру и синтаксис, что и для ваших операций пути.
FastAPI основан на Starlette и полностью совместим с ним. Так что, любой дополнительный код Starlette, который у вас есть, будет также работать.
На самом деле, FastAPI - это класс, унаследованный от Starlette. Таким образом, если вы уже знаете или используете Starlette, большая часть функционала будет работать так же.
С FastAPI вы получаете все возможности Starlette (так как FastAPI это всего лишь Starlette на стероидах):
FastAPI основан на Pydantic и полностью совместим с ним. Так что, любой дополнительный код Pydantic, который у вас есть, будет также работать.
Включая внешние библиотеки, также основанные на Pydantic, такие как: ORM'ы, ODM'ы для баз данных.
Это также означает, что во многих случаях вы можете передавать тот же объект, который получили из запроса, непосредственно в базу данных, так как всё проверяется автоматически.
И наоборот, во многих случаях вы можете просто передать объект, полученный из базы данных, непосредственно клиенту.
С FastAPI вы получаете все возможности Pydantic (так как, FastAPI основан на Pydantic, для обработки данных):
Никакой нервотрёпки :
Не нужно изучать новых схем в микроязыках.
Если вы знаете аннотации типов в Python, вы знаете, как использовать Pydantic.
Прекрасно сочетается с вашими IDE/linter/мозгом:
Потому что структуры данных pydantic - это всего лишь экземпляры классов, определённых вами. Автодополнение, проверка кода, mypy и ваша интуиция - всё будет работать с вашими проверенными данными.
Проверка сложных структур:
Использование иерархических моделей Pydantic; List, Dict и т.п. из модуля typing (входит в стандартную библиотеку Python).
Валидаторы позволяют четко и легко определять, проверять и документировать сложные схемы данных в виде JSON Schema.
У вас могут быть глубоко вложенные объекты JSON и все они будут проверены и аннотированы.
Расширяемость:
Pydantic позволяет определять пользовательские типы данных или расширять проверку методами модели, с помощью проверочных декораторов.