Identity, tracing и idempotency
Разделение платформенных идентификаторов и правила их передачи.
Identity, tracing и idempotency
Платформа использует разные идентификаторы для разных задач. Их нельзя подменять одним универсальным correlation ID.
| Значение | Назначение | Источник |
|---|---|---|
X-Consumer-ID | Какая система инициировала запрос | WSO2 из доверенной identity |
X-External-Request-ID | Конкретная попытка внешнего вызова | Consumer; fallback может создать WSO2 |
traceparent | Техническая distributed trace | Consumer или WSO2 |
Idempotency-Key | Одно бизнес-намерение | Consumer |
Consumer identity
Внешний header X-Consumer-ID не является доверенным сам по себе. Каноническое значение определяется из application, credentials или token claims и передаётся дальше платформой.
External request ID
Каждая новая попытка вызова получает отдельный ID. Он используется для поиска конкретного request/response и расследования transport retry.
Trace context
Платформа использует W3C traceparent. Валидный входной context продолжается; при отсутствии WSO2 создаёт новый. Все ключевые компоненты передают и логируют trace context.
Idempotency
Одинаковое бизнес-намерение повторяется с тем же Idempotency-Key. Минимальный scope:
(consumer_id, idempotency_key)Повтор не должен создавать вторую бизнес-операцию. Срок хранения idempotency record задаётся policy конкретного API; упомянутое в черновиках окно 24 часа не является универсальным без утверждённого контракта.
Trace не обеспечивает idempotency
Новый trace может относиться к повтору той же операции, а один trace — содержать множество внутренних вызовов. Для дедупликации используется отдельный business key.
Logging
Структурированный log event включает environment, component, API/operation, Consumer ID, External Request ID, trace ID, result и duration. Payload логируется только по утверждённым правилам masking и retention.