Передать API key#

Создайте ApiKeyScheme для места, которое выбрал сервер. Пример ниже отправляет ключ в X-API-Key и не добавляет его в публичную сигнатуру get_reports().

→ Запрос · GET /auth/api-key

{"headers": {"X-API-Key": "key-demo-123"}}

← Ответ · 200 OK

{"credential": "key-demo-123"}
# examples/docs/auth_api_key.py
REPORTING_KEY = ApiKeyScheme.header("X-API-Key", name="reporting-key")


@dataclass(frozen=True, slots=True, kw_only=True)
class GetReports(HttpOperation[AuthResult]):
    __http__ = Http.get("/auth/api-key", security=REPORTING_KEY)


class ReportsApi(SyncApi):
    get_reports = op(GetReports)


def main() -> None:
    identity = Identity(auth=(REPORTING_KEY.static("key-demo-123"),))
    with request_client() as client:
        result = ReportsApi(client, identity=identity).get_reports()
    print(f"API key: {result.credential}")

security=REPORTING_KEY связывает операцию со схемой. REPORTING_KEY.static(...) создаёт источник значения, а Identity передаёт его роутеру во время вызова.

Для параметра запроса замените объявление на ApiKeyScheme.query("api_key", name="reporting-key"). Остальной код не меняется.

Файл целиком
"""Attach an API key declared as an authentication scheme."""

from dataclasses import dataclass

from pydantic import BaseModel

from eazy_sdk import Http, HttpOperation, Identity, SyncApi, op
from eazy_sdk.auth import ApiKeyScheme
from examples.docs.request_site import request_client


class AuthResult(BaseModel):
    credential: str


# region docs: auth-api-key
# examples/docs/auth_api_key.py
REPORTING_KEY = ApiKeyScheme.header("X-API-Key", name="reporting-key")


@dataclass(frozen=True, slots=True, kw_only=True)
class GetReports(HttpOperation[AuthResult]):
    __http__ = Http.get("/auth/api-key", security=REPORTING_KEY)


class ReportsApi(SyncApi):
    get_reports = op(GetReports)


def main() -> None:
    identity = Identity(auth=(REPORTING_KEY.static("key-demo-123"),))
    with request_client() as client:
        result = ReportsApi(client, identity=identity).get_reports()
    print(f"API key: {result.credential}")
# endregion docs: auth-api-key


if __name__ == "__main__":
    main()
API key: key-demo-123

Дальше#