Códigos de erro e tratamento de erro | Conceitos da API do Graph
Aplica-se a: API do Graph | Azure AD (Active Directory)
Os aplicativos cliente que usam a API do Graph do Azure AD (Active Directory) devem implementar a lógica de tratamento de erro para reagir da forma mais adequada possível a condições variáveis e para proporcionar a melhor experiência possível aos clientes. Este tópico aborda os tipos de erros retornados pela API do Graph do Azure AD, além de fornecer diretrizes gerais sobre como lidar com eles.
Importante
Recomendamos que você use o Microsoft Graph em vez da API do Azure AD Graph para acessar os recursos do Azure Active Directory. Nossos esforços de implantação agora estão concentrados no Microsoft Graph e não há planos de novos aprimoramento para a API do Azure AD Graph. Há um número muito limitado de cenários para os quais a API do Azure AD Graph ainda pode ser adequada. Para saber mais, confira a postagem do blog sobre Microsoft Graph ou Azure AD Graph no Centro de Desenvolvimento do Office.
Tratando erros na API do Graph
Tipos de erros
Os erros da Graph API ocorrem nas seguintes categorias.
- Erros de cliente. Os erros de cliente são representados por códigos de status HTTP da série 400. Eles incluem objetos com valores inválidos, objetos que não têm propriedades ou valores de propriedade necessários, a tentativa de acessar um recurso inexistente, a tentativa de atualizar uma propriedade somente leitura e a omissão do token de autorização necessário. Para resolver esses erros, corrija o problema subjacente antes de repetir a solicitação.
- Erros de servidor. Os erros de servidor são representados por códigos de status HTTP da série 500, por exemplo uma falha de diretório temporária. A maioria desses erros é temporária e pode ser resolvida repetindo-se a solicitação.
- Erros de rede/protocolo. Uma variedade de erros relacionados à rede pode ocorrer durante o envio de uma solicitação ou o recebimento de uma resposta, como erros de resolução de nome de host, conexões fechadas prematuramente e erros de negociação SSL. A maioria desses erros não pode ser resolvida com uma repetição; é necessário solucionar o problema subjacente. No entanto, alguns erros, como as falhas de resolução de nome de host ou os erros relacionados com tempos limites, podem ser resolvidos repetindo-se a solicitação.
Estrutura da mensagem de erro
Os erros da Graph API têm um corpo formatado que consiste em um código de status HTTP, uma mensagem e valores. Use as propriedades do corpo do erro na sua lógica de tratamento de erro.
Observação: algumas respostas HTTP podem não incluir o corpo de resposta de código/mensagem/valores pois a solicitação é encaminhada por meio de serviços de proxy e gateway. Não se esqueça de incluir a lógica padrão capaz de manipular erros apenas com base no código do status HTTP.
Veja a seguir um exemplo de um erro HTTP 400 Request_BadRequest.
HTTP/1.1 400 Bad Request
Content-Type: application/json;odata=minimalmetadata;charset=utf-8
request-id: ddca4a7e-02b1-4899-ace1-19860901f2fc
Date: Tue, 02 Jul 2013 01:48:19 GMT
…
{
"odata.error" : {
"code" : "Request_BadRequest",
"message" : {
"lang" : "en",
"value" : "A value is required for property 'mailNickname' of resource 'Group'."
},
"values" : null
}
}
Cada corpo de mensagem tem propriedades de código, mensagem e valores.
Código: projete sua lógica de tratamento de erros para que ela seja ramificada com base no código.
"code" : "Request_BadRequest"
Mensagem: uma tupla linguagem/valor que representa uma mensagem de erro legível. O conteúdo está no campo de valor. No exemplo a seguir, a solicitação falha porque o valor da propriedade mailNickname está ausente.
"message" : { "lang" : "en", "value" : "A value is required for property 'mailNickname' of resource 'Group'." }
Valores: uma coleção de pares nome/valor que fornecem mais informações sobre a natureza da falha. No exemplo a seguir, não são incluídos valores.
"values" : null
Referência do código de erro
Códigos de erro HTTP
A tabela a seguir lista os códigos de erro, as mensagens de erro e as ações do da API do Graph a serem considerados durante a correção dos erros.
Em geral, os erros HTTP 500 respondem às novas tentativas, distribuídas preferencialmente em intervalos de tempo cada vez mais longos (“repetir com um intervalo de retirada”) e com um fator de distribuição aleatório. Os erros da série 400 indicam um problema que deve ser solucionado antes de uma nova tentativa.
Código de Status HTTP | Código do erro | Mensagem de erro | Detalhes |
---|---|---|---|
400 | Directory_ExpiredPageToken | O valor do token de página especificado expirou e não pode mais ser incluído na sua solicitação. | |
400 | Directory_ResultSizeLimitExceeded | O limite de tamanho do resultado foi excedido | A solicitação não puder ser atendida porque está associada a muitos resultados. Este erro ocorre muito raramente. |
400 | DomainVerificationCodeNotFound | A verificação do domínio falhou porque o processo de verificação não pôde localizar o registro TXT com código de verificação correspondente. | |
400 | ObjectConflict | O nome de domínio já existe em um domínio não verificado nesta empresa. | |
400 | ObjectConflict | O nome de domínio já existe em um domínio verificado nesta empresa. | |
400 | ObjectInUse | Não foi possível excluir o domínio atualmente referenciado por um usuário, grupo ou aplicativo multilocatário | |
400 | ObjectPendingDeletion | Não foi possível verificar um domínio existente que aguarda a exclusão. | |
400 | ObjectPendingTakeover | Não foi possível excluir um domínio no processo de tomada de controle de um locatário | |
400 | Request_BadRequest | Solicitação inválida. Corrija a solicitação antes de tentar novamente. | Indica um erro na solicitação, como um valor de propriedade inválido ou um argumento de consulta sem suporte. Corrija a solicitação antes de tentar novamente. |
400 | Request_DataContractVersionMissing | O parâmetro da versão do contrato de dados está ausente. Inclua a versão da API como um parâmetro de consulta em todas as suas solicitações. | |
400 | Request_InvalidDataContractVersion | A versão da API especificada é inválida. O valor deve corresponder exatamente a uma versão suportada. | |
400 | Request_InvalidRequestUrl | A URL solicitada era inválida. A solicitação deve ser como /nomededomíniodolocatário/Entidade ou /$metadados. O nome de domínio do locatário pode ser um dos nomes de domínio verificados, não verificados ou uma identificação de contexto. | |
400 | Request_UnsupportedQuery | A solicitação GET não tem suporte. Corrija os parâmetros da solicitação e tente novamente. | |
401 | Authentication_ExpiredToken | O token de acesso expirou. Renove-o antes de enviar a solicitação. | O token de acesso expirou. Renove o token e reenvie-o. |
401 | Authentication_MissingOrMalformed | Token de acesso ausente ou inválido. | O valor access_token no cabeçalho de autorização está ausente ou é inválido. Esse valor é necessário. Use o valor no token de autenticação. |
401 | Authorization_IdentityDisabled | A entidade de segurança do aplicativo de chamada está desabilitada. | A entidade especificada no token de acesso está no diretório, mas ele está desabilitado. Habilite novamente a conta no diretório e tente novamente. |
401 | Authorization_IdentityNotFound | A identidade do aplicativo de chamada não pôde ser estabelecida. | A entidade especificada no token de acesso não foi encontrada no diretório. Isso pode ocorrer porque o token está desatualizado, a entidade foi excluída do diretório ou a sincronização de diretório foi adiada. |
403 | Authentication_Unauthorized | Solicitação não autorizada. | O token contém solicitações inválidas ou sem suporte. Obtenha o token de solicitação novamente e repita a solicitação. |
403 | Authorization_RequestDenied | As credenciais especificadas não têm privilégios suficientes para fazer esta solicitação. | A solicitação foi negada devido a privilégios insuficientes. Por exemplo, uma entidade de segurança não administrativa não tem permissão para excluir um recurso. |
403 | Directory_QuotaExceeded | O limite de cota do objeto do diretório para o {tenantName} foi excedido. Solicite ao administrador que aumente o limite de cota ou exclua objetos para reduzir a cota utilizada. | Uma cota de diretório foi excedida. Possivelmente, o locatário tem muitos objetos ou os objetos têm muitos valores. Isso também ocorre quando muitos objetos são criados para a entidade de segurança. Aumente o número máximo de objetos permitidos para o locatário ou a entidade de segurança ou reduza o número de valores incluídos na solicitação de criação/atualização. |
404 | Directory_ObjectNotFound | Não é possível ler as informações da empresa no diretório. | |
404 | Request_ResourceNotFound | O recurso {recurso} não existe ou um de seus objetos de referência-propriedade consultados não está presente. | O recurso identificado pelo URI não existe. Revise o valor e repita a solicitação. |
409 | Request_MultipleObjectsWithSameKeyValue | Era esperado um recurso único para o resultado, mas foram encontrados vários recursos. Atualize o(s) objeto(s) para resolver o conflito. | Esse erro pode ocorrer quando existem dois ou mais objetos com o mesmo valor de chave, por exemplo, quando dois usuários usam o mesmo UserPrincipalName. |
429 | Excesso de solicitações. | Esse erro ocorre quando as solicitações são limitadas. Um tempo de espera sugerido é retornado no valor Retry-After do cabeçalho de resposta. Repita a solicitação após aguardar o tempo recomendado. | |
500 | Service_InternalServerError | Erro de servidor interno encontrado. | Erro de servidor interno ao processar a solicitação. |
502 | [Tudo] | “... Serviço não disponível....” | Um servidor que atua como gateway ou proxy detectou um erro em outro servidor ao processar a solicitação. Espere alguns minutos e repita a solicitação. |
503 | Directory_ConcurrencyViolation | Erro causado por solicitações simultâneas ao locatário. Aguarde um instante e tente novamente. | |
503 | Erro encontrado durante a verificação de DNS (observação: pode ser causado por vários motivos como DNS atualmente inativo). | ||
Authentication_Unknown | Erro de servidor interno. | Este código de erro é usado quando outros códigos de erro não se aplicam. | |
Authentication_UnsupportedTokenType | O tipo de token apresentado não é manipulado. Somente os tokens de portador têm suporte. | Não há suporte para o tipo de token. Revise o tipo de token antes de tentar a solicitação novamente. | |
Directory_BindingRedirection | Não há informações de locatário disponíveis localmente. Use as seguintes URLs para obter as informações. | Quando a partição de locatário não está disponível no datacenter, os clientes devem se conectar ao URI retornado na resposta. | |
Directory_BindingRedirectionInternalServerError | Não há informações de locatário disponíveis localmente. O servidor encontrou um erro interno ao tentar preencher os pontos de extremidade de datacenter mais próximos. | Quando uma exceção de redirecionamento de associação ocorre, a lista de pontos de extremidade de datacenter mais próximos do serviço é preenchida. Esse erro indica uma exceção durante o preenchimento da lista. Tente executar a consulta novamente. | |
Directory_CompanyNotFound | Não é possível ler as informações da empresa no diretório. | Erro ao carregar as informações da empresa no diretório de serviço. | |
Directory_ReplicaUnavailable | A réplica preferencial não está disponível. Tente novamente sem nenhum cabeçalho de chave de sessão da réplica. | Omita o cabeçalho x-ms-replica-session-key e tente novamente. | |
Headers_DataContractVersionMissing | O cabeçalho da versão do contrato de dados está ausente. Inclua x-ms-dirapi-data-contract-version na solicitação. | A versão do contrato do cliente está ausente na solicitação. | |
Headers_HeaderNotSupported | O cabeçalho {0} não tem suporte no momento. | A solicitação contém um cabeçalho HTTP sem suporte. Altere o cabeçalho e tente a solicitação novamente. | |
Request_InvalidReplicaSessionKey | A chave de sessão de réplica fornecida não é válida. | Corrija a chave de sessão de réplica e tente executa a solicitação novamente. | |
Request_ThrottledPermanently | A solicitação foi restringida definitivamente. Contate a equipe de suporte para resolver o problema. | O locatário excedeu várias vezes e com persistência o limite da taxa de solicitação de token. As solicitações do locatário serão rejeitadas até que o serviço seja renegociado. Para obter ajuda, contate o Suporte da Microsoft. |