Movatterモバイル変換


[0]ホーム

URL:


Перейти к содержанию
Join theFastAPI Cloud waiting list 🚀
Follow@fastapi onX (Twitter) to stay updated
FollowFastAPI onLinkedIn to stay updated
Subscribe to theFastAPI and friends newsletter 🎉
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor

FastAPI

🌐 Перевод выполнен с помощью ИИ и людей

Этот перевод был сделан ИИ под руководством людей. 🤝

В нем могут быть ошибки из-за неправильного понимания оригинального смысла или неестественности и т. д. 🤖

Вы можете улучшить этот перевод,помогая нам лучше направлять ИИ LLM.

Английская версия

FastAPI

Фреймворк FastAPI: высокая производительность, прост в изучении, позволяет быстро писать код, готов к продакшн

ТестПокрытиеВерсия пакетаПоддерживаемые версии Python


Документация: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."

Kabir Khan -Microsoft(ref)

"Мы начали использовать библиотекуFastAPI, чтобы поднятьREST-сервер, к которому можно обращаться запредсказаниями. [для Ludwig]"

Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala -Uber(ref)

"Netflix рада объявить об открытом релизе нашего фреймворка оркестрацииантикризисного управления:Dispatch! [создан с помощьюFastAPI]"

Kevin Glisson, Marc Vilanova, Forest Monsen -Netflix(ref)

"Я в полном восторге отFastAPI. Это так весело!"

Brian Okken -Ведущий подкастаPython Bytes(ref)

"Честно говоря, то, что вы создали, выглядит очень солидно и отполировано. Во многих смыслах это то, чем я хотел видетьHug — очень вдохновляет видеть, как кто-то это создал."

Timothy Crosley -СоздательHug(ref)

"Если вы хотите изучить одинсовременный фреймворк для создания REST API, посмотритеFastAPI [...] Он быстрый, простой в использовании и лёгкий в изучении [...]"

"Мы переключились наFastAPI для нашихAPI [...] Думаю, вам тоже понравится [...]"

Ines Montani - Matthew Honnibal -ОснователиExplosion AI — создателиspaCy(ref) -(ref)

"Если кто-то собирается делать продакшн-API на Python, я настоятельно рекомендуюFastAPI. Онпрекрасно спроектирован,прост в использовании иотлично масштабируется, сталключевым компонентом нашей стратегии API-first и приводит в действие множество автоматизаций и сервисов, таких как наш Virtual TAC Engineer."

Deon Pillsbury -Cisco(ref)

Мини-документальный фильм о FastAPI

В конце 2025 года вышелмини-документальный фильм о FastAPI, вы можете посмотреть его онлайн:

FastAPI Mini Documentary

Typer, FastAPI для CLI

Если вы создаёте приложениеCLI для использования в терминале вместо веб-API, посмотритеTyper.

Typer — младший брат FastAPI. И он задуман какFastAPI для CLI. ⌨️ 🚀

Зависимости

FastAPI стоит на плечах гигантов:

  • Starlette для части, связанной с вебом.
  • Pydantic для части, связанной с данными.

Установка

Создайте и активируйтевиртуальное окружение, затем установите 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):

Swagger UI

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

Теперь откройтеhttp://127.0.0.1:8000/redoc.

Вы увидите альтернативную автоматическую документацию (предоставлена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 будет автоматически обновлена, включая новое тело запроса:

Swagger UI

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

Swagger UI interaction

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

Swagger UI interaction

Обновление альтернативной документации API

Теперь откройтеhttp://127.0.0.1:8000/redoc.

  • Альтернативная документация также отразит новый параметр запроса и тело запроса:

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.
    • Модели баз данных.
    • ...и многое другое.
  • Автоматическую интерактивную документацию API, включая 2 альтернативных интерфейса:
    • Swagger UI.
    • ReDoc.

Возвращаясь к предыдущему примеру кода,FastAPI будет:

  • Валидировать наличиеitem_id в пути дляGET иPUT HTTP-запросов.
  • Валидировать, чтоitem_id имеет типint дляGET иPUT HTTP-запросов.
    • Если это не так, клиент увидит полезную понятную ошибку.
  • Проверять, есть ли необязательный параметр запроса с именемq (например,http://127.0.0.1:8000/items/foo?q=somequery) дляGET HTTP-запросов.
    • Поскольку параметрq объявлен с= None, он необязателен.
    • БезNone он был бы обязательным (как тело запроса в случае сPUT).
  • ДляPUT HTTP-запросов к/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...

...и посмотрите, как ваш редактор кода будет автоматически дополнять атрибуты и знать их типы:

editor support

Более полный пример с дополнительными возможностями см. вУчебник - Руководство пользователя.

Осторожно, спойлер: учебник - руководство пользователя включает:

  • Объявлениепараметров из других источников: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:

Дополнительные опциональные зависимости FastAPI:

  • orjson — обязателен, если вы хотите использоватьORJSONResponse.
  • ujson — обязателен, если вы хотите использоватьUJSONResponse.

Лицензия

Этот проект распространяется на условиях лицензии MIT.


[8]ページ先頭

©2009-2026 Movatter.jp