FastAPI¶
🌐 Перевод выполнен с помощью ИИ и людей
Этот перевод был сделан ИИ под руководством людей. 🤝
В нем могут быть ошибки из-за неправильного понимания оригинального смысла или неестественности и т. д. 🤖
Вы можете улучшить этот перевод,помогая нам лучше направлять ИИ LLM.
Фреймворк FastAPI: высокая производительность, прост в изучении, позволяет быстро писать код, готов к продакшн
Документация:https://fastapi.tiangolo.com
Исходный код:https://github.com/fastapi/fastapi
FastAPI — это современный, быстрый (высокопроизводительный) веб-фреймворк для создания API на Python, основанный на стандартных аннотациях типов Python.
Ключевые особенности:
- Скорость: Очень высокая производительность, на уровнеNodeJS иGo (благодаря Starlette и Pydantic).Один из самых быстрых доступных фреймворков Python.
- Быстрота разработки: Увеличьте скорость разработки фич примерно на 200–300%. *
- Меньше ошибок: Сократите примерно на 40% количество ошибок, вызванных человеком (разработчиком). *
- Интуитивность: Отличная поддержка редактора кода.Автозавершение везде. Меньше времени на отладку.
- Простота: Разработан так, чтобы его было легко использовать и осваивать. Меньше времени на чтение документации.
- Краткость: Минимизируйте дублирование кода. Несколько возможностей из каждого объявления параметров. Меньше ошибок.
- Надежность: Получите код, готовый к продакшн. С автоматической интерактивной документацией.
- На основе стандартов: Основан на открытых стандартах API и полностью совместим с ними:OpenAPI (ранее известный как Swagger) иJSON Schema.
* оценка на основе тестов внутренней команды разработчиков, создающих продакшн-приложения.
Спонсоры¶
Ключевой-спонсор¶
Золотые и серебряные спонсоры¶
Мнения¶
"[...] В последнее время я много где используюFastAPI. [...] На самом деле я планирую использовать его для всехML-сервисов моей команды в Microsoft. Некоторые из них интегрируются в основной продуктWindows, а некоторые — в продуктыOffice."
"Мы начали использовать библиотекуFastAPI, чтобы поднятьREST-сервер, к которому можно обращаться запредсказаниями. [для Ludwig]"
"Netflix рада объявить об открытом релизе нашего фреймворка оркестрацииантикризисного управления:Dispatch! [создан с помощьюFastAPI]"
"Я в полном восторге отFastAPI. Это так весело!"
"Честно говоря, то, что вы создали, выглядит очень солидно и отполировано. Во многих смыслах это то, чем я хотел видетьHug — очень вдохновляет видеть, как кто-то это создал."
"Если вы хотите изучить одинсовременный фреймворк для создания REST API, посмотритеFastAPI [...] Он быстрый, простой в использовании и лёгкий в изучении [...]"
"Мы переключились наFastAPI для нашихAPI [...] Думаю, вам тоже понравится [...]"
"Если кто-то собирается делать продакшн-API на Python, я настоятельно рекомендуюFastAPI. Онпрекрасно спроектирован,прост в использовании иотлично масштабируется, сталключевым компонентом нашей стратегии API-first и приводит в действие множество автоматизаций и сервисов, таких как наш Virtual TAC Engineer."
Мини-документальный фильм о FastAPI¶
В конце 2025 года вышелмини-документальный фильм о FastAPI, вы можете посмотреть его онлайн:
Typer, FastAPI для CLI¶
Если вы создаёте приложениеCLI для использования в терминале вместо веб-API, посмотритеTyper.
Typer — младший брат FastAPI. И он задуман какFastAPI для CLI. ⌨️ 🚀
Зависимости¶
FastAPI стоит на плечах гигантов:
Установка¶
Создайте и активируйтевиртуальное окружение, затем установите FastAPI:
$pipinstall"fastapi[standard]"---> 100%Примечание: Обязательно заключите"fastapi[standard]" в кавычки, чтобы это работало во всех терминалах.
Пример¶
Создание¶
Создайте файлmain.py со следующим содержимым:
fromfastapiimportFastAPIapp=FastAPI()@app.get("/")defread_root():return{"Hello":"World"}@app.get("/items/{item_id}")defread_item(item_id:int,q:str|None=None):return{"item_id":item_id,"q":q}Или используйтеasync def...
Если ваш код используетasync /await, используйтеasync def:
fromfastapiimportFastAPIapp=FastAPI()@app.get("/")asyncdefread_root():return{"Hello":"World"}@app.get("/items/{item_id}")asyncdefread_item(item_id:int,q:str|None=None):return{"item_id":item_id,"q":q}Примечание:
Если не уверены, посмотрите раздел«Нет времени?» оasync иawait в документации.
Запуск¶
Запустите сервер командой:
$fastapidevmain.py ╭────────── FastAPI CLI - Development mode ───────────╮ │ │ │ Serving at: http://127.0.0.1:8000 │ │ │ │ API docs: http://127.0.0.1:8000/docs │ │ │ │ Running in development mode, for production use: │ │ │ │ fastapi run │ │ │ ╰─────────────────────────────────────────────────────╯INFO: Will watch for changes in these directories: ['/home/user/code/awesomeapp']INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)INFO: Started reloader process [2248755] using WatchFilesINFO: Started server process [2248757]INFO: Waiting for application startup.INFO: Application startup complete.О командеfastapi dev main.py...
Командаfastapi dev читает ваш файлmain.py, находит в нём приложениеFastAPI и запускает сервер с помощьюUvicorn.
По умолчаниюfastapi dev запускается с включённой авто-перезагрузкой для локальной разработки.
Подробнее вдокументации по FastAPI CLI.
Проверка¶
Откройте браузер наhttp://127.0.0.1:8000/items/5?q=somequery.
Вы увидите JSON-ответ:
{"item_id":5,"q":"somequery"}Вы уже создали API, который:
- Получает HTTP-запросы попутям
/и/items/{item_id}. - Обапути используют
GETоперации (также известные как HTTPметоды). - Путь
/items/{item_id}имеетpath-параметрitem_id, который должен бытьint. - Путь
/items/{item_id}имеет необязательныйstrпараметр запросаq.
Интерактивная документация API¶
Перейдите наhttp://127.0.0.1:8000/docs.
Вы увидите автоматическую интерактивную документацию API (предоставленаSwagger UI):

Альтернативная документация API¶
Теперь откройтеhttp://127.0.0.1:8000/redoc.
Вы увидите альтернативную автоматическую документацию (предоставленаReDoc):

Пример обновления¶
Теперь измените файлmain.py, чтобы принимать тело запроса изPUT HTTP-запроса.
Объявите тело запроса, используя стандартные типы Python, спасибо Pydantic.
fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()classItem(BaseModel):name:strprice:floatis_offer:bool|None=None@app.get("/")defread_root():return{"Hello":"World"}@app.get("/items/{item_id}")defread_item(item_id:int,q:str|None=None):return{"item_id":item_id,"q":q}@app.put("/items/{item_id}")defupdate_item(item_id:int,item:Item):return{"item_name":item.name,"item_id":item_id}Серверfastapi dev должен перезагрузиться автоматически.
Обновление интерактивной документации API¶
Перейдите наhttp://127.0.0.1:8000/docs.
- Интерактивная документация API будет автоматически обновлена, включая новое тело запроса:

- Нажмите кнопку «Try it out», это позволит вам заполнить параметры и напрямую взаимодействовать с API:

- Затем нажмите кнопку «Execute», интерфейс свяжется с вашим API, отправит параметры, получит результаты и отобразит их на экране:

Обновление альтернативной документации API¶
Теперь откройтеhttp://127.0.0.1:8000/redoc.
- Альтернативная документация также отразит новый параметр запроса и тело запроса:

Подведём итоги¶
Итак, вы объявляетеодин раз типы параметров, тело запроса и т.д. как параметры функции.
Вы делаете это с помощью стандартных современных типов Python.
Вам не нужно изучать новый синтаксис, методы или классы конкретной библиотеки и т.п.
Только стандартныйPython.
Например, дляint:
item_id:intили для более сложной моделиItem:
item:Item...и с этим единственным объявлением вы получаете:
- Поддержку редактора кода, включая:
- Автозавершение.
- Проверку типов.
- Валидацию данных:
- Автоматические и понятные ошибки, когда данные некорректны.
- Валидацию даже для глубоко вложенных объектов JSON.
- Преобразование входных данных: из сети в данные и типы Python. Чтение из:
- JSON.
- Параметров пути.
- Параметров запроса.
- Cookies.
- HTTP-заголовков.
- Форм.
- Файлов.
- Преобразование выходных данных: из данных и типов Python в данные сети (например, JSON):
- Преобразование типов Python (
str,int,float,bool,listи т.д.). - Объекты
datetime. - Объекты
UUID. - Модели баз данных.
- ...и многое другое.
- Преобразование типов Python (
- Автоматическую интерактивную документацию API, включая 2 альтернативных интерфейса:
- Swagger UI.
- ReDoc.
Возвращаясь к предыдущему примеру кода,FastAPI будет:
- Валидировать наличие
item_idв пути дляGETиPUTHTTP-запросов. - Валидировать, что
item_idимеет типintдляGETиPUTHTTP-запросов.- Если это не так, клиент увидит полезную понятную ошибку.
- Проверять, есть ли необязательный параметр запроса с именем
q(например,http://127.0.0.1:8000/items/foo?q=somequery) дляGETHTTP-запросов.- Поскольку параметр
qобъявлен с= None, он необязателен. - Без
Noneон был бы обязательным (как тело запроса в случае сPUT).
- Поскольку параметр
- Для
PUTHTTP-запросов к/items/{item_id}читать тело запроса как JSON:- Проверять, что есть обязательный атрибут
name, который должен бытьstr. - Проверять, что есть обязательный атрибут
price, который должен бытьfloat. - Проверять, что есть необязательный атрибут
is_offer, который должен бытьbool, если он присутствует. - Всё это также будет работать для глубоко вложенных объектов JSON.
- Проверять, что есть обязательный атрибут
- Автоматически преобразовывать из и в JSON.
- Документировать всё с помощью OpenAPI, что может быть использовано:
- Системами интерактивной документации.
- Системами автоматической генерации клиентского кода для многих языков.
- Предоставлять 2 веб-интерфейса интерактивной документации напрямую.
Мы только поверхностно ознакомились, но вы уже понимаете, как всё это работает.
Попробуйте изменить строку:
return{"item_name":item.name,"item_id":item_id}...из:
..."item_name":item.name......на:
..."item_price":item.price......и посмотрите, как ваш редактор кода будет автоматически дополнять атрибуты и знать их типы:

Более полный пример с дополнительными возможностями см. вУчебник - Руководство пользователя.
Осторожно, спойлер: учебник - руководство пользователя включает:
- Объявлениепараметров из других источников:HTTP-заголовки,cookies,поля формы ифайлы.
- Как задатьограничения валидации вроде
maximum_lengthилиregex. - Очень мощную и простую в использовании системувнедрения зависимостей.
- Безопасность и аутентификацию, включая поддержкуOAuth2 сJWT токенами иHTTP Basic аутентификацию.
- Более продвинутые (но столь же простые) приёмы объявленияглубоко вложенных JSON-моделей (спасибо Pydantic).
- ИнтеграциюGraphQL сStrawberry и другими библиотеками.
- Множество дополнительных функций (благодаря Starlette), таких как:
- WebSockets
- чрезвычайно простые тесты на основе HTTPX и
pytest - CORS
- сессии с использованием cookie
- ...и многое другое.
Разверните приложение (опционально)¶
При желании вы можете развернуть своё приложение FastAPI вFastAPI Cloud, присоединяйтесь к списку ожидания, если ещё не сделали этого. 🚀
Если у вас уже есть аккаунтFastAPI Cloud (мы пригласили вас из списка ожидания 😉), вы можете развернуть ваше приложение одной командой.
Перед развертыванием убедитесь, что вы вошли в систему:
$fastapiloginYou are logged in to FastAPI Cloud 🚀Затем разверните приложение:
$fastapideployDeploying to FastAPI Cloud...✅ Deployment successful!🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.devВот и всё! Теперь вы можете открыть ваше приложение по этой ссылке. ✨
О FastAPI Cloud¶
FastAPI Cloud создан тем же автором и командой, что иFastAPI.
Он упрощает процесссоздания образа,развертывания идоступа к API при минимальных усилиях.
Он переносит тот жеопыт разработчика, что и при создании приложений на FastAPI, на ихразвертывание в облаке. 🎉
FastAPI Cloud — основной спонсор и источник финансирования для проектов с открытым исходным кодом из экосистемыFastAPI and friends. ✨
Развертывание у других облачных провайдеров¶
FastAPI — это open source и стандартизированный фреймворк. Вы можете развернуть приложения FastAPI у любого облачного провайдера на ваш выбор.
Следуйте руководствам вашего облачного провайдера по развертыванию приложений FastAPI. 🤓
Производительность¶
Независимые бенчмарки TechEmpower показывают приложенияFastAPI, работающие под управлением Uvicorn, какодин из самых быстрых доступных фреймворков Python, уступающий только самим Starlette и Uvicorn (используются внутри FastAPI). (*)
Чтобы узнать больше, см. разделБенчмарки.
Зависимости¶
FastAPI зависит от Pydantic и Starlette.
Зависимостиstandard¶
Когда вы устанавливаете FastAPI с помощьюpip install "fastapi[standard]", он идёт с группой опциональных зависимостейstandard:
Используется Pydantic:
email-validator— для проверки адресов электронной почты.
Используется Starlette:
httpx— обязателен, если вы хотите использоватьTestClient.jinja2— обязателен, если вы хотите использовать конфигурацию шаблонов по умолчанию.python-multipart- обязателен, если вы хотите поддерживать«парсинг» форм черезrequest.form().
Используется FastAPI:
uvicorn— сервер, который загружает и «отдаёт» ваше приложение. Включаетuvicorn[standard], содержащий некоторые зависимости (например,uvloop), нужные для высокой производительности.fastapi-cli[standard]— чтобы предоставить командуfastapi.- Включает
fastapi-cloud-cli, который позволяет развернуть ваше приложение FastAPI вFastAPI Cloud.
- Включает
Без зависимостейstandard¶
Если вы не хотите включать опциональные зависимостиstandard, можно установитьpip install fastapi вместоpip install "fastapi[standard]".
Безfastapi-cloud-cli¶
Если вы хотите установить FastAPI со стандартными зависимостями, но безfastapi-cloud-cli, установитеpip install "fastapi[standard-no-fastapi-cloud-cli]".
Дополнительные опциональные зависимости¶
Есть дополнительные зависимости, которые вы можете установить.
Дополнительные опциональные зависимости Pydantic:
pydantic-settings— для управления настройками.pydantic-extra-types— дополнительные типы для использования с Pydantic.
Дополнительные опциональные зависимости FastAPI:
orjson— обязателен, если вы хотите использоватьORJSONResponse.ujson— обязателен, если вы хотите использоватьUJSONResponse.
Лицензия¶
Этот проект распространяется на условиях лицензии MIT.























