3.1 Проектирование и реализация REST API (GET, POST, PUT, DELETE)
9 из 9 шагов пройдено
3 из 3 баллов  получено

Передача состояния представления (REST) содержит правила, процессы и инструменты, которые обеспечивают взаимодействие между микросервисами. Это службы методов, которые идентифицируются и выполняются через URL-адреса конечных точек. В настоящее время сосредоточение внимания на методах API перед созданием всего приложения является одной из самых популярных и эффективных стратегий проектирования микросервисов. Этот подход, называемый разработкой микросервисов с упором на API, сначала фокусируется на потребностях клиента, а затем определяет, какие методы обслуживания API нам необходимо реализовать для удовлетворения этих требований клиента.

Мы начнем с самого простого приложения, в котором мы сможем получать, публиковать, изменять и удалять записи через API. Пока мы рассмотрим инициализацию нашего приложения, а именно код:

from fastapi import FastAPI

app = FastAPI()

В этой лекции хотелось бы разобрать этот момент подробнее и разобрать все атрибуты, которые принимает класс:

FastAPI(
    *,
    debug=False,
    routes=None,
    title="FastAPI",
    summary=None,
    description="",
    version="0.1.0",
    openapi_url="/openapi.json",
    openapi_tags=None,
    servers=None,
    dependencies=None,
    default_response_class=Default(JSONResponse),
    redirect_slashes=True,
    docs_url="/docs",
    redoc_url="/redoc",
    swagger_ui_oauth2_redirect_url="/docs/oauth2-redirect",
    swagger_ui_init_oauth=None,
    middleware=None,
    exception_handlers=None,
    on_startup=None,
    on_shutdown=None,
    lifespan=None,
    terms_of_service=None,
    contact=None,
    license_info=None,
    openapi_prefix="",
    root_path="",
    root_path_in_servers=True,
    responses=None,
    callbacks=None,
    webhooks=None,
    deprecated=None,
    include_in_schema=True,
    swagger_ui_parameters=None,
    generate_unique_id_function=Default(generate_unique_id),
    separate_input_output_schemas=True,
    **extra
)

Разберем подробнее большинство из них: 

Параметр

Описание
debug

Логическое значение, указывающее, следует ли возвращать отладочные трассировки при ошибках сервера.

Посмотреть документацию Starlette для приложений.

Тип: bool: False

routes

Обычно вы не используете этот параметр с FastAPI, он унаследован от Starlette и поддерживается для совместимости. Этот параметр принимает список маршрутов для обслуживания входящих запросов HTTP и WebSocket.

Тип: Optional[List[BaseRoute]]По умолчанию: None

title

Название вашего API. Оно будет добавлено в OpenAPI (например, в документации /docs).

Пример:

from fastapi import FastAPI

app = FastAPI(title="My_First_Project")

Тип: str: 'FastAPI'

summary

Краткое описание API. Оно будет добавлено в OpenAPI (например, в документации /docs).

Пример

from fastapi import FastAPI

app = FastAPI(summary="My CRUD application.")

Тип: Optional[str]По умолчанию: None

description

Описание API. Поддерживает Markdown (с использованием синтаксиса CommonMark). Оно будет добавлено в OpenAPI (например, в документации /docs).

Пример 

from fastapi import FastAPI
app = FastAPI( description="""The CRUD application supports writing,
                              reading, updating and deleting posts.""")

Тип: str: ''

version

Версия API. Она будет добавлена в OpenAPI (например, в документации /docs).

Обратите внимание, что это версия вашего приложения, а не версия спецификации OpenAPI и не используемая версия FastAPI.

Пример

from fastapi import FastAPI

app = FastAPI(version="0.0.1")

Тип: str: '0.1.0'

openapi_url

URL-адрес, на котором будет доступна схема OpenAPI.

Пример

from fastapi import FastAPI

app = FastAPI(openapi_url="/api/v1/openapi.json")

Тип: Optional[str]  По умолчанию: '/openapi.json'

openapi_tags

Список тегов, используемых OpenAPI, это те же теги, которые вы можете установить в операциях пути, например:

  • @app.get("/users/", tags=["users"])
  • @app.get("/items/", tags=["items"])

Теги можно использовать для указания порядка, показанного в таких документациях, как пользовательский интерфейс Swagger, используемых в /docs.

Узнайте больше в документации FastAPI для URL-адресов метаданных.

Тип: Optional[List[Dict[str, Any]]] По умолчанию: None

servers

Список словарей с информацией о подключении к целевому серверу.

Вы можете использовать это, например, если ваше приложение обслуживается из разных доменов, и вы хотите использовать один и тот же пользовательский интерфейс Swagger для взаимодействия с каждым из них (вместо того, чтобы открывать несколько вкладок браузера).

Узнайте больше в документации FastAPI.

Пример

app = FastAPI(servers=[{"url": "https://stag.example.com", "description": "Staging"},
                       {"url": "https://prod.example.com", "description": "Production"}, ])

Тип: Optional[List[Dict[str, Union[str, Any]]]]По умолчанию: None

default_response_class

Используемый класс ответа. Узнайте больше в документации FastAPI для пользовательского ответа - HTML, Stream, File и другие.

Пример 

from fastapi import FastAPI
from fastapi.responses import ORJSONResponse

app = FastAPI(default_response_class=ORJSONResponse)

Тип: Type[Response] По умолчанию: Default(JSONResponse)

redirect_slashes

Следует ли обнаруживать и перенаправлять косые черты в URL-адресах, когда клиент не использует тот же формат.

Пример  

from fastapi import FastAPI
app = FastAPI(redirect_slashes=True)  # the default


@app.get("/items/")
async def read_items():
    return {"item_id": "Foo"}

С помощью этого параметра, если клиент переходит в /items (без завершения косой черты), он будет автоматически перенаправлен с кодом состояния HTTP 307 на /items/.

Тип: bool: True

docs_url

Путь к автоматической интерактивной документации API. URL-адрес по умолчанию - /docs. Вы можете отключить его, установив в None. Мы это рассматривали в разделе 1.4 данного курса.

Тип: Optional[str] По умолчанию: '/docs'

redoc_url

Путь к альтернативной автоматической интерактивной документации API, предоставленной ReDoc.

URL-адрес по умолчанию - /redoc. Вы можете отключить его, установив в None. Мы это рассматривали в разделе 1.4 данного курса.

Тип: Optional[str] По умолчанию: '/redoc'

swagger_ui_oauth2_redirect_url

Конечная точка перенаправления OAuth2 для пользовательского интерфейса Swagger.

По умолчанию это /docs/oauth2-redirect.

Это используется только в том случае, если вы используете OAuth2 (с кнопкой "Авторизовать") с пользовательским интерфейсом Swagger.

Тип: Optional[str] По умолчанию: '/docs/oauth2-redirect'

swagger_ui_init_oauth

Конфигурация OAuth2 для пользовательского интерфейса Swagger, по умолчанию отображается в /docs.

Тип: Optional[Dict[str, Any]]  По умолчанию: None

middleware

Список промежуточного программного обеспечения, которое будет добавлено при создании приложения.

В FastAPI вы обычно делаете это с помощью app.add_middleware().

Тип: Optional[Sequence[Middleware]] По умолчанию: None

exception_handlers

Словарь с обработчиками исключений. В FastAPI вы обычно используете декоратор @app.exception_handler().

Тип:Optional[Dict[Union[int, Type[Exception]], Callable[[Request, Any], Coroutine[Any, Any, Response]]]] По умолчанию: None

contact

Контактная информация для открытого API. Может содержать несколько полей:

name Идентификационное имя контактного лица/организации.
url URL указывающий на контактную информацию.
email Email адрес контактного лица/организации.

Тип:Dict По умолчанию: None

license_info

Информация о лицензии открытого API. Может содержать несколько полей:

name Обязательный, если установлен параметр license_info. Название лицензии, используемой для API
url URL, указывающий на лицензию, используемую для API.

Тип:Dict По умолчанию: None

terms_of_service

Ссылка к условиям пользования API.

Тип:Str По умолчанию: None

root_path

Префикс пути, обрабатываемый прокси, который не виден приложению, но виден внешними клиентами, что влияет на такие вещи, как пользовательский интерфейс Swagger.

Пример

from fastapi import FastAPI

app = FastAPI(root_path="/api/v1")

Тип: str: ''

На этом мы закончим рассмотрение класса FastAPI, в следующем шаге мы приступим к созданию скелета из маршрутов и создания методов обработки запросов.


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Нет обсуждений. Начните первое.