Spec-Zone.ru › FastAPI

FastAPI

FastAPI

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

Test Coverage Package version Supported Python versions


Документация: https://fastapi.tiangolo.com

Исходный код: https://github.com/fastapi/fastapi


FastAPI — это современный, быстрый (высокой производительности) фреймворк для веб-API на Python, основанный на стандартных подсказках типов Python.

Ключевые особенности:

  • Быстрый: Очень высокая производительность, сопоставимая с NodeJS и Go (благодаря Starlette и Pydantic). Один из самых быстрых фреймворков Python, доступных на рынке.
  • Быстрая разработка: Увеличьте скорость разработки функций примерно на 200–300%. *
  • Меньше ошибок: Снизьте количество ошибок, допущенных разработчиком, примерно на 40%. *
  • Интуитивный: Отличная поддержка редакторов. Автодополнение (также известное как автозаполнение, IntelliSense) везде. Меньше времени, затрачиваемого на отладку.
  • Легкий: Разработан для простоты использования и обучения. Меньше времени, затрачиваемого на чтение документации.
  • Краткость: Минимизируйте дублирование кода. Несколько функций из каждого объявления параметров. Меньше ошибок.
  • Надежный: Получите код, готовый к использованию в производстве. С автоматической интерактивной документацией.
  • Основанный на стандартах: Основан на (и полностью совместим с) открытыми стандартами для API: OpenAPI (ранее известный как Swagger) и JSON Schema.

* оценка основана на тестах внутренней команды разработчиков при создании приложений для производства.

Мнения

Kabir Khan - Microsoft (ссылка)

Piero Molino, Yaroslav Dudin и Sai Sumanth Miryala - Uber (ссылка)

Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ссылка)

Brian Okken - хозяин подкаста Python Bytes (ссылка)

Timothy Crosley - создатель Hug (ссылка)

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

Deon Pillsbury - Cisco (ссылка)

Typer, FastAPI для командной строки

Требования

  • Starlette для веб-частей.
  • Pydantic для данных.

Установка

$ pip install "fastapi[standard]"

---> 100%

Пример

Создайте его

  • Создайте файл main.py с:
from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}
Или используйте async def...

Если ваш код использует async / await, используйте async def:

from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

Примечание:

Если вы не знаете, ознакомьтесь с разделом «В спешке?» о async и await в документации.

Запустите его

$ fastapi dev main.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 WatchFiles
INFO:     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.

Проверьте его

{"item_id": 5, "q": "somequery"}
  • Получает HTTP-запросы по путям / и /items/{item_id}.
  • Оба пути принимают GET операции (также известные как HTTP-методы).
  • Путь /items/{item_id} имеет параметр пути item_id, который должен быть int.
  • Путь /items/{item_id} имеет необязательный параметр запроса str q.

Интерактивная документация API

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

Пример обновления

from typing import Union

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    price: float
    is_offer: Union[bool, None] = None


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}


@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    return {"item_name": item.name, "item_id": item_id}

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

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

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

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

Итог

item_id: int
item: Item
  • Поддержка редакторов, включая:
    • Автодополнение.
    • Проверку типов.
  • Валидация данных:
    • Автоматическое и ясное отображение ошибок при неверных данных.
    • Валидация даже для глубоко вложенных JSON-объектов.
  • Преобразование входных данных (также известное как сериализация, парсинг, маршаллинг): преобразование данных из сети в данные и типы Python. Чтение из:
    • JSON.
    • Параметров пути.
    • Параметров запроса.
    • Куки.
    • Заголовков.
    • Формы.
    • Файлов.
  • Преобразование выходных данных (также известное как сериализация, парсинг, маршаллинг): преобразование данных из Python-данных и типов в сетевые данные (в формате JSON):
    • Преобразование Python-типов (str, int, float, bool, list, и т. д.).
    • Объекты datetime.
    • Объекты UUID.
    • Модели баз данных.
    • …и многое другое.
  • Автоматическая интерактивная документация API, включая 2 альтернативных пользовательских интерфейса:
    • Swagger UI.
    • ReDoc.

  • Проверьте, что в пути присутствует item_id для GET и PUT запросов.
  • Проверьте, что item_id имеет тип int для GET и PUT запросов.
    • В противном случае клиент увидит полезную и понятную ошибку.
  • Проверьте, есть ли необязательный параметр запроса q (как в http://127.0.0.1:8000/items/foo?q=somequery) для GET запросов.
    • Так как параметр q объявлен как = None, он необязателен.
    • Без None он был бы обязательным (как и тело в случае с PUT).
  • Для PUT запросов к /items/{item_id}, считайте тело как JSON:
    • Проверьте, что в нём есть обязательный атрибут name, который должен быть str.
    • Проверьте, что в нём есть обязательный атрибут price, который должен быть float.
    • Проверьте, что в нём есть необязательный атрибут is_offer, который должен быть bool, если он присутствует.
    • Всё это также будет работать для глубоко вложенных JSON-объектов.
  • Автоматическое преобразование из JSON и в JSON.
  • Документируйте всё с помощью OpenAPI, которое может использоваться:
    • Системой интерактивной документации.
    • Системой автоматической генерации кода клиентов для многих языков.
  • Предоставьте 2 интерактивных веб-интерфейса документации напрямую.

    return {"item_name": item.name, "item_id": item_id}
        ... "item_name": item.name ...
        ... "item_price": item.price ...
  • Объявление параметров из разных источников, таких как: заголовки, куки, поля формы и файлы.
  • Как настроить ограничения валидации как maximum_length или regex.
  • Очень мощная и простая в использовании система инъекции зависимостей.
  • Безопасность и аутентификация, включая поддержку OAuth2 с JWT-токенами и аутентификацией HTTP Basic.
  • Более продвинутые (но такие же простые) методы объявления вложенных JSON-моделей (благодаря Pydantic).
  • Интеграция с GraphQL с помощью Strawberry и других библиотек.
  • Многие дополнительные функции (благодаря Starlette):
    • WebSockets
    • очень простые тесты на основе HTTPX и pytest
    • CORS
    • Сессии Cookie
    • …и многое другое.

Производительность

Зависимости

standard Зависимости

  • email-validator - для валидации адресов электронной почты.
  • httpx - Необходима, если вы хотите использовать TestClient.
  • jinja2 - Необходима, если вы хотите использовать конфигурацию шаблонов по умолчанию.
  • python-multipart - Необходима, если вы хотите поддерживать разбор форм, с request.form().
  • uvicorn - для сервера, который загружает и обслуживает ваше приложение. Это включает uvicorn[standard], что включает некоторые зависимости (например, uvloop) необходимые для высокопроизводительного обслуживания.
  • fastapi-cli - для предоставления команды fastapi.

Без standard зависимостей

Дополнительные необязательные зависимости

  • pydantic-settings - для управления настройками.
  • pydantic-extra-types - для дополнительных типов, которые можно использовать с Pydantic.
  • orjson - Необходима, если вы хотите использовать ORJSONResponse.
  • ujson - Необходима, если вы хотите использовать UJSONResponse.

Лицензия

Была ли эта страница полезной?
Спасибо за ваш отзыв!
Спасибо за ваш отзыв!

© 2018 Sebastián Ramírez
Licensed under the MIT License.
https://fastapi.tiangolo.com/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API