Перейти к основному содержимому

Протокол, streams и ошибки

Checked-in generated handlers обслуживают Connect, gRPC и gRPC-Web. Используйте generated client своего языка: он правильно несёт procedure paths и protobuf encoding.

Authentication и namespace

Передавайте Authorization: Bearer <token> в каждом вызове. Невалидный token получает HTTP 401 до RPC handler. Для известного principal RPC authorization проверяет verb × kind × namespace; отказ — permission_denied.

x-graphene-namespace выбирает namespace. Статический scoped token может выбрать только свой scope. OIDC и service-account identities заново проверяются по bindings запрошенного namespace. Для discovery возможностей клиента используйте WhoAmI.

Коды ошибок

CodeЗначение для клиента
invalid_argumentсломан ref/query/spec/params или конфликтуют fields; исправить request
unauthenticatedнет валидной identity; получить новый token
permission_deniedidentity известна, но точного права нет
not_foundотсутствует record, command, source, run, blob или session
already_existsidentity/name конфликтует с существующим объектом
failed_preconditionlifecycle state запрещает операцию
abortedконфликт concurrent durable update; допустим retry
resource_exhaustedlimit/backpressure сервера; retry с backoff
unavailableнедоступна dependency или transport; retry с backoff
internalсервер упал вне контракта caller; сохранить details

Unary и streaming handlers переводят один gRPC status в эквивалентный Connect code. Окончание stream до документированного terminal message не является успехом.

Контракты streams

  • WatchRun первым отдаёт текущий status и заканчивается после terminal.
  • Events(after_event_id) использует id события Temporal history как стабильный resume cursor.
  • Logs(follow=true) подписывается до чтения history и дедуплицирует шов history/live.
  • Metrics и Trace отдают snapshot backend до live OTLP batches.
  • Live telemetry сбрасывает самые старые данные медленного consumer и сообщает dropped, а не блокирует producers.
  • Pty первым сообщает session_id и закрывает shell со смертью stream.
  • Download, DownloadSource и materialization — server streams; caller должен дочитать или отменить их.

Retry и idempotency

Повторяйте unavailable, resource_exhausted, aborted с ограниченным exponential backoff. Reads безопасны. Invoke принимает request_id для deduplication. Выбранный caller run id присоединяет тот же run и не должен генерироваться заново после неопределённого ответа. Не повторяйте вслепую mutation с неизвестным внешним эффектом.

Payloads

Raw JSON bytes сохраняют schemas, заданные pipeline и resource kinds. До отрисовки формы получите spec и command schemas из kind/<name>. OTLP batches — сериализованные ExportMetricsServiceRequest или ExportTraceServiceRequest; snapshots сохраняют JSON-формат query backend.