Передать 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