ErrorDetail nos detalhes do status, e ele diz o que o
POST /secure/send teria respondido para a mesma requisição. Então tudo o que
está escrito sobre erros do REST vale aqui também — o código gRPC é o jeito do transporte de dizer
isso, e o ErrorDetail é o detalhe.
Lendo ErrorDetail
Ele viaja no trailer padrão de rich status (grpc-status-details-bin). Leia com o helper da sua
biblioteca:
Num
SendStream o mesmo
ErrorDetail chega inline no campo error do resultado, ao lado do code numérico.
Decida pelo
code, não pela message. A mensagem é para uma pessoa lendo um log e pode ter
outra redação numa versão futura; os códigos fazem parte do contrato congelado.
Quando um retry ajuda, um google.rpc.RetryInfo padrão é empacotado ao lado do ErrorDetail com o
mesmo atraso, para as bibliotecas cliente que o respeitam.
Envio
Nada recusado é cobrado, e nada recusado conta contra o seu limite de taxa.
OUTCOME_UNKNOWN: repita só com client_ref
Pelo mesmo motivo, se você configurar uma política de retry na sua biblioteca cliente (um
retryPolicy no service config do gRPC), inclua nela UNAVAILABLE e RESOURCE_EXHAUSTED e nunca
UNKNOWN.
Sessões e a própria API
UNAUTHENTICATED cobre três situações diferentes, então leia o ErrorDetail.code: só
SESSION_EXPIRED se resolve fazendo login de novo. Veja
Autenticação e sessões.
Recibos
Um
Ack que nomeia um recibo que já se foi não é um erro — ele é contado em already_gone. Veja
Recibos de entrega via gRPC.
Relacionados
Erros da API REST
As mesmas recusas, como status HTTP.
Tratamento de erros
Construindo para o recibo, e não para a resposta.