Códigos de resposta de status

Os códigos de status a seguir podem ser retornados nas respostas do gRPC. Isso acontece em todas as versões do gRPC documentadas neste site.

Código Status Observações
0 OK Retorno em Success
1 CANCELLED A operação foi cancelada, geralmente pelo chamador
2 UNKNOWN Por exemplo, este erro pode ser retornado quando um valor de status recebido de outro espaço de endereço pertence a um espaço de erro desconhecido. Além disso, os erros gerados por APIs que não retornam informações suficientes podem ser convertidos para esse erro.
3 INVALID_ARGUMENT O cliente especificou um argumento inválido.
4 DEADLINE_EXCEEDED O prazo expirou antes da conclusão da operação. Para operações que alteram o estado do sistema, este erro pode ser retornado mesmo que a operação seja concluída com êxito. Por exemplo, uma resposta bem-sucedida de um servidor que atrasou tempo suficiente para que o prazo expirasse.
5 NOT_FOUND Algumas entidades solicitadas não foram encontradas.
6 ALREADY_EXISTS A entidade que um cliente tentou criar já existe.
7 PERMISSION_DENIED O autor da chamada não tem permissão para executar a operação especificada. Não use PERMISSION_DENIED para rejeições causadas pelo esgotamento de algum recurso. Use RESOURCE_EXHAUSTED para esses erros. Não use PERMISSION_DENIED se o autor da chamada não puder ser identificado. Em vez dele, use UNAUTHENTICATED para esses erros. Receber um código de erro PERMISSION_DENIED não significa que a solicitação é válida ou que a entidade solicitada existe ou atende a outras condições prévias.
8 RESOURCE_EXHAUSTED Houve o esgotamento de algum recurso, como uma cota por usuário. Também é possível que todo sistema de arquivos esteja sem espaço.
9 FAILED_PRECONDITION A operação foi rejeitada porque o estado do sistema não é o necessário para a execução dela. Por exemplo, o diretório que vai ser excluído não está vazio ou uma operação rmdir foi aplicada a outro diretório.
10 ABORTED A operação foi cancelada, normalmente devido a um problema de simultaneidade, como falha na verificação do sequenciador ou cancelamento da transação.
11 OUT_OF_RANGE Houve uma tentativa da operação depois do intervalo válido.
12 UNIMPLEMENTED A operação não foi implementada ou não é compatível nem está ativada neste serviço.
13 INTERNAL Erros internos. Significa que algumas invariantes esperadas pelo sistema subjacente foram corrompidas. Este código é reservado para erros graves.
14 UNAVAILABLE O serviço não está disponível no momento. Muito provavelmente, essa é uma condição temporária que pode ser corrigida se for repetida com uma espera.
15 DATA_LOSS Perda ou corrupção irrecuperável de dados.
16 UNAUTHENTICATED A solicitação não tem credenciais válidas de autenticação para a operação.

Às vezes, vários códigos de erros podem ser aplicados. Os serviços retornam o código de erro mais específico. Por exemplo, dê preferência a OUT_OF_RANGE em vez de FAILED_PRECONDITION se os dois códigos forem válidos. Da mesma forma, prefira NOT_FOUND ou ALREADY_EXISTS em vez de FAILED_PRECONDITION.

FAILED_PRECONDITION x ABORTED x UNAVAILABLE

Veja a seguir um teste que pode ajudar você a decidir entre FAILED_PRECONDITION, ABORTED e UNAVAILABLE:

  • Use UNAVAILABLE se o cliente puder repetir apenas a chamada com falha.
  • Use ABORTED se o cliente precisar tentar novamente em um nível superior, como quando um teste e um conjunto especificado pelo cliente falhar, o que indica que o cliente precisa reiniciar uma sequência de leitura-modificação-gravação.
  • Use FAILED_PRECONDITION se o cliente não tentar novamente até que o estado do sistema seja explicitamente corrigido. Por exemplo, se um "rmdir" falhar porque o diretório não está vazio, é melhor retornar FAILED_PRECONDITION, porque o cliente não precisa tentar novamente, a menos que os arquivos sejam excluídos do diretório.

INVALID_ARGUMENT x FAILED_PRECONDITION x OUT_OF_RANGE

Veja a seguir um teste que pode ajudar você a decidir entre INVALID_ARGUMENT, FAILED_PRECONDITION e OUT_OF_RANGE:

  • Use INVALID_ARGUMENT se os argumentos forem problemáticos, independente do estado do sistema. Por exemplo: um URL incorreto
  • Use OUT_OF_RANGE se um valor estiver fora do intervalo devido ao estado do sistema. Por exemplo, start_date é anterior a start_date_restrict.
  • Use FAILED_PRECONDITION se o valor for inválido devido ao estado do sistema, mas não for um valor OUT_OF_RANGE.