Возможности¶
🌐 Перевод выполнен с помощью ИИ и людей
Этот перевод был сделан ИИ под руководством людей. 🤝
В нем могут быть ошибки из-за неправильного понимания оригинального смысла или неестественности и т. д. 🤖
Вы можете улучшить этот перевод,помогая нам лучше направлять ИИ LLM.
Возможности FastAPI¶
FastAPI предлагает вам следующее:
Основано на открытых стандартах¶
- OpenAPI для создания API, включая объявленияоперацийпути, параметров, тел запросов, безопасности и т.д.
- Автоматическая документация моделей данных с помощьюJSON Schema (так как сама спецификация OpenAPI основана на JSON Schema).
- Разработан вокруг этих стандартов, после тщательного их изучения. Это не дополнительная надстройка поверх.
- Это также позволяет использовать автоматическуюгенерацию клиентского кода на многих языках.
Автоматическая документация¶
Интерактивная документация для API и исследовательские веб-интерфейсы. Поскольку фреймворк основан на OpenAPI, существует несколько вариантов документирования, 2 из них включены по умолчанию.
- Swagger UI, с интерактивным исследованием, вызовом и тестированием вашего API прямо из браузера.

- Альтернативная документация API вReDoc.

Только современный Python¶
Все основано на стандартныханнотациях типов Python (благодаря Pydantic). Не нужно изучать новый синтаксис. Только стандартный современный Python.
Если вам нужно освежить знания о типах в Python (даже если вы не используете FastAPI), выделите 2 минуты и просмотрите краткое руководство:Типы Python.
Вы пишете стандартный Python с типами:
fromdatetimeimportdatefrompydanticimportBaseModel# Объявляем параметр как `str`# и получаем поддержку редактора кода внутри функцииdefmain(user_id:str):returnuser_id# Модель PydanticclassUser(BaseModel):id:intname:strjoined:dateЭто можно использовать так:
my_user:User=User(id=3,name="John Doe",joined="2018-07-19")second_user_data={"id":4,"name":"Mary","joined":"2018-11-30",}my_second_user:User=User(**second_user_data)Информация
**second_user_data означает:
Передать ключи и значения словаряsecond_user_data в качестве аргументов "ключ-значение", эквивалентно:User(id=4, name="Mary", joined="2018-11-30")
Поддержка редакторов (IDE)¶
Весь фреймворк был продуман так, чтобы быть простым и интуитивно понятным в использовании, все решения были проверены на множестве редакторов еще до начала разработки, чтобы обеспечить наилучшие условия при написании кода.
В опросах Python‑разработчиков видно,что одной из самых часто используемых функций является «автозавершение».
Вся структураFastAPI основана на удовлетворении этой возможности. Автозавершение работает везде.
Вам редко нужно будет возвращаться к документации.
Вот как ваш редактор может вам помочь:

- вPyCharm:

Вы будете получать автозавершение кода даже там, где вы считали это невозможным раньше. Как пример, ключprice внутри тела JSON (который может быть вложенным), приходящего в запросе.
Больше никаких неправильных имён ключей, метания по документации или прокручивания кода вверх и вниз в попытках узнать — использовали вы ранееusername илиuser_name.
Краткость¶
FastAPI имеет продуманные значенияпо умолчанию для всего, с опциональными настройками везде. Все параметры могут быть тонко подстроены так, чтобы делать то, что вам нужно, и определять необходимый вам API.
Но по умолчанию всё«просто работает».
Проверка значений¶
Проверка значений для большинства (или всех?)типов данных Python, включая:
- Объекты JSON (
dict). - Массив JSON (
list) с определёнными типами элементов. - Строковые (
str) поля с ограничением минимальной и максимальной длины. - Числа (
int,float) с минимальными и максимальными значениями и т.п.
- Объекты JSON (
Проверка для более экзотических типов, таких как:
- URL.
- Email.
- UUID.
- ...и другие.
Все проверки обрабатываются хорошо зарекомендовавшим себя и надёжнымPydantic.
Безопасность и аутентификация¶
Встроенные функции безопасности и аутентификации. Без каких‑либо компромиссов с базами данных или моделями данных.
Все схемы безопасности, определённые в OpenAPI, включая:
- HTTP Basic.
- OAuth2 (также стокенами JWT). Ознакомьтесь с руководствомOAuth2 с JWT.
- Ключи API в:
- HTTP-заголовках.
- Параметрах запросов.
- Cookies и т.п.
Вдобавок все функции безопасности от Starlette (включаясессионные cookies).
Все инструменты и компоненты спроектированы для многократного использования и легко интегрируются с вашими системами, хранилищами данных, реляционными и NoSQL базами данных и т.д.
Внедрение зависимостей¶
FastAPI включает в себя чрезвычайно простую в использовании, но чрезвычайно мощную системуВнедрения зависимостей.
- Даже зависимости могут иметь зависимости, создавая иерархию или«граф» зависимостей.
- Всёавтоматически обрабатывается фреймворком.
- Все зависимости могут запрашивать данные из запросов идополнять операции пути ограничениями и автоматической документацией.
- Автоматическая проверка даже для параметровопераций пути, определённых в зависимостях.
- Поддержка сложных систем аутентификации пользователей,соединений с базами данных и т.д.
- Никаких компромиссов с базами данных, интерфейсами и т.д. Но при этом — лёгкая интеграция со всеми ними.
Нет ограничений на "Плагины"¶
Или, другими словами, нет необходимости в них — просто импортируйте и используйте нужный вам код.
Любая интеграция разработана настолько простой в использовании (с зависимостями), что вы можете создать «плагин» для своего приложения в пару строк кода, используя ту же структуру и синтаксис, что и для вашихопераций пути.
Проверен¶
- 100%покрытие тестами.
- 100%аннотирование типов в кодовой базе.
- Используется в продакшн‑приложениях.
Возможности Starlette¶
FastAPI основан наStarlette и полностью совместим с ним. Так что любой дополнительный код Starlette, который у вас есть, также будет работать.
На самом деле,FastAPI — это подклассStarlette. Таким образом, если вы уже знаете или используете Starlette, большая часть функционала будет работать так же.
СFastAPI вы получаете все возможностиStarlette (так как FastAPI — это всего лишь Starlette на стероидах):
- Серьёзно впечатляющая производительность. Этоодин из самых быстрых фреймворков на Python, наравне сNodeJS иGo.
- ПоддержкаWebSocket.
- Фоновые задачи в том же процессе.
- События запуска и выключения.
- Тестовый клиент построен на HTTPX.
- CORS, GZip, статические файлы, потоковые ответы.
- Поддержкасессий и cookie.
- 100% покрытие тестами.
- 100% аннотирование типов в кодовой базе.
Возможности Pydantic¶
FastAPI полностью совместим с (и основан на)Pydantic. Поэтому любой дополнительный код Pydantic, который у вас есть, также будет работать.
Включая внешние библиотеки, также основанные на Pydantic, такие какORM’ы,ODM’ы для баз данных.
Это также означает, что во многих случаях вы можете передавать тот же объект, который получили из запроса,непосредственно в базу данных, так как всё проверяется автоматически.
И наоборот, во многих случаях вы можете просто передать объект, полученный из базы данных,непосредственно клиенту.
СFastAPI вы получаете все возможностиPydantic (так как FastAPI основан на Pydantic для обработки данных):
- Никакой нервотрёпки:
- Не нужно изучать новые схемы в микроязыках.
- Если вы знаете типы в Python, вы знаете, как использовать Pydantic.
- Прекрасно сочетается с вашимIDE/линтер/мозгом:
- Потому что структуры данных pydantic — это всего лишь экземпляры классов, определённых вами; автозавершение, проверка кода, mypy и ваша интуиция — всё будет работать с вашими валидированными данными.
- Валидациясложных структур:
- Использование иерархических моделей Pydantic;
List,Dictи т.п. из модуляtyping(входит в стандартную библиотеку Python). - Валидаторы позволяют чётко и легко определять, проверять и документировать сложные схемы данных в виде JSON Schema.
- У вас могут быть глубоковложенные объекты JSON, и все они будут проверены и аннотированы.
- Использование иерархических моделей Pydantic;
- Расширяемость:
- Pydantic позволяет определять пользовательские типы данных или расширять проверку методами модели с помощью декораторов валидаторов.
- 100% покрытие тестами.







