Códigos de error y control de errores | Conceptos de Graph API
Se aplica a: Graph API | Azure Active Directory (AD)
Las aplicaciones cliente que usan la API de Azure Active Directory (AD) Graph deben implementar la lógica de control de errores para reaccionar de forma eficaz ante condiciones variables y ofrecer la mejor experiencia posible a sus clientes. Este tema analiza los tipos de errores que devuelve la API de Azure AD Graph y ofrece instrucciones generales sobre cómo controlarlos.Importante
Se recomienda encarecidamente que use Microsoft Graph en lugar de la API de Azure AD Graph para acceder a recursos de Azure Active Directory. Nuestros esfuerzos de desarrollo se concentran ahora en Microsoft Graph y no están previstas mejoras adicionales para la API de Azure AD Graph. Hay un número muy limitado de escenarios para los que la API de Azure AD Graph todavía podría ser adecuada; para más información, vea la entrada del blog Microsoft Graph o Azure AD Graph en el centro de desarrollo de Office.
Control de errores de Graph API
Tipos de errores
Los errores de Graph API se generan en las categorías siguientes.
- Errores del cliente. Los errores del cliente se representan mediante códigos de estado HTTP de la serie 400. Estos incluyen objetos con valores no válidos, objetos que precisan propiedades o valores de propiedad necesarios, intentos de acceso a recursos inexistentes, intentos de actualización de propiedades de solo lectura y omisión de los tokens de autorización necesarios. Para solucionar estos errores, corrija el problema subyacente antes de reintentar la solicitud.
- Errores del servidor. Los errores del servidor se representan mediante códigos de estado HTTP de la serie 500 (por ejemplo, un error de directorio transitorio). La mayoría de estos errores son transitorios y se resuelven al reintentar la solicitud.
- Errores de protocolo o red. Al enviar una solicitud o recibir una respuesta pueden producirse distintos errores relacionados con la red (como errores de resolución de nombres de host, conexiones que se cierran antes de tiempo y errores de negociación SSL). La mayoría de estos errores no se resuelven al reintentar la solicitud: debe corregirse el problema subyacente. No obstante, sí es posible que algunos de ellos (como los errores de tiempo de expiración o resolución de nombres de host) se resuelvan al reintentar la solicitud.
Estructura del mensaje de error
Los errores de Graph API tienen un cuerpo con formato que consta de un código de estado HTTP, un mensaje y los valores. Use las propiedades del cuerpo del error en su lógica de control de errores.
Nota: Si la solicitud se redirige a través de servicios de puerta de enlace y proxy, es posible que algunas respuestas HTTP no incluyan el cuerpo de respuesta del código, el mensaje o los valores. Asegúrese de incluir lógica predeterminada capaz de controlar los errores basándose exclusivamente en el código de estado HTTP.
A continuación se muestra un ejemplo de un error de Request_BadRequest HTTP 400.
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
}
}
El cuerpo de cada mensaje tiene propiedades de código, mensaje y valores.
Código: diseñe la lógica de control de errores para aplicar a la rama en función del código.
"code" : "Request_BadRequest"
Mensaje: una tupla de idioma o valor que representa un mensaje de error legible para el ojo humano. El contenido se incluye en el campo de valor. En el ejemplo siguiente, la solicitud presenta un error porque falta el valor de la propiedad mailNickname.
"message" : { "lang" : "en", "value" : "A value is required for property 'mailNickname' of resource 'Group'." }
Valores: una colección de pares nombre-valor que amplían la información sobre la naturaleza del error. En el ejemplo siguiente no se incluyen valores.
"values" : null
Referencia de código de error
Códigos de error HTTP
En la tabla siguiente se muestran los códigos de error de Graph API, mensajes de error y acciones que se deben considerar cuando se corrigen errores.
En general, los errores de la serie HTTP 500 responden a reintentos, preferiblemente distribuidos en intervalos de tiempo cada vez más largos (“reintento con un intervalo de interrupción”) y un factor de distribución aleatorio. Los errores de la serie 400 indican un problema que se debe corregir antes de reintentarlo.
Código de estado HTTP | Código de error | Mensaje de error | Detalles |
---|---|---|---|
400 | Directory_ExpiredPageToken | El valor del token de página especificado ha expirado y ya no puede incluirse en la solicitud. | |
400 | Directory_ResultSizeLimitExceeded | Se superó el límite de tamaño de resultados. | No se puede tramitar la solicitud porque está asociada a demasiados resultados. Este error se produce con muy poca frecuencia. |
400 | DomainVerificationCodeNotFound | Se produce un error en la comprobación de dominio porque el proceso de comprobación no puede encontrar el registro TXT con el correspondiente código de verificación. | |
400 | ObjectConflict | Ya existe el nombre de dominio en un dominio no comprobado de esta empresa. | |
400 | ObjectConflict | Ya existe el nombre de dominio en un dominio comprobado de esta empresa. | |
400 | ObjectInUse | No se puede eliminar el dominio al que hace referencia actualmente un usuario, un grupo o una aplicación multiinquilino. | |
400 | ObjectPendingDeletion | No se puede comprobar un dominio existente que está pendiente de eliminación. | |
400 | ObjectPendingTakeover | No se puede eliminar un dominio en el proceso de adquisición del inquilino. | |
400 | Request_BadRequest | Solicitud incorrecta. Corrija la solicitud antes de reintentarlo. | Indica un error en la solicitud, como un valor de propiedad no válido o un argumento de consulta no admitido. Corrija la solicitud antes de reintentarlo. |
400 | Request_DataContractVersionMissing | Falta el parámetro de versión del contrato de datos. Incluya api-version como un parámetro de consulta con todas las solicitudes. | |
400 | Request_InvalidDataContractVersion | La versión de API especificada no es válida. El valor debe coincidir exactamente con una versión compatible. | |
400 | Request_InvalidRequestUrl | La dirección URL no era válida. La solicitud debe ser similar a /tenantdomainname/Entity o /$metadata. El nombre de dominio del inquilino puede ser cualquiera de los nombres de dominio comprobado o sin comprobar o el identificador de contexto. | |
400 | Request_UnsupportedQuery | No se admite la solicitud GET. Corrija los parámetros de solicitud y vuelva a intentarlo. | |
401 | Authentication_ExpiredToken | El token de acceso expiró. Renueve el token antes de enviar la solicitud. | El token de acceso expiró. Renueve el token y vuelva a enviarlo. |
401 | Authentication_MissingOrMalformed | Falta el token de acceso o tiene un formato incorrecto. | El valor de access_token del encabezado de autorización falta o tiene un formato incorrecto. Este valor es obligatorio. Utilice el valor del token de autenticación. |
401 | Authorization_IdentityDisabled | La entidad de seguridad de la aplicación que realiza la llamada está deshabilitada. | La entidad de seguridad especificada en el token de acceso está en el directorio, pero está deshabilitada. Vuelva a habilitar la cuenta en el directorio e inténtelo de nuevo. |
401 | Authorization_IdentityNotFound | No se pudo establecer la identidad de la aplicación que realiza la llamada. | La entidad de seguridad especificada en el token de acceso no se encuentra en el directorio. Esto puede ocurrir porque el token está obsoleto, la entidad de seguridad se ha eliminado del directorio o se ha retrasado la sincronización de directorios. |
403 | Authentication_Unauthorized | Solicitud no autorizada. | El token contiene notificaciones no válidas o no admitidas. Obtenga de nuevo el token de solicitud y vuelva a intentar la solicitud. |
403 | Authorization_RequestDenied | Las credenciales especificadas no tiene suficientes privilegios para realizar esta solicitud. | La solicitud se deniega debido a privilegios suficientes. Por ejemplo, una entidad de seguridad no- administrativa no tiene permiso para eliminar un recurso. |
403 | Directory_QuotaExceeded | Se ha superado el límite de cuota del objeto de directorio para {tenantName}. Pida al administrador que aumente el límite de cuota o elimine objetos para reducir la cuota utilizada. | Se ha superado una cuota de directorio. Puede que inquilino tenga demasiados objetos o que los objetos tengan demasiados valores. Esto también ocurre cuando se crean demasiados objetos en la entidad. Aumente la cantidad máxima de objetos permitidos en el inquilino o la entidad, o bien disminuya la cantidad de los valores que se incluyen en la solicitud de creación o actualización. |
404 | Directory_ObjectNotFound | No se puede leer la información de la compañía del directorio. | |
404 | Request_ResourceNotFound | El recurso {recurso} no existe o uno de sus objetos consultados de propiedad de referencia no está presente. | El recurso identificado por el URI no existe. Revise el valor y reintente la solicitud. |
409 | Request_MultipleObjectsWithSameKeyValue | Se esperaba un único recurso para el resultado, pero se encontraron varios recursos. Actualice los objetos para resolver el conflicto. | Este error puede producirse cuando hay dos o más objetos que tienen el mismo valor de clave, por ejemplo, cuando dos usuarios tienen el mismo UserPrincipalName. |
429 | Demasiadas solicitudes | Este error se produce cuando las solicitudes se están limitando. Se devuelve un tiempo de espera sugerido en el valor Retry-After del encabezado de respuesta. Después de esperar el número recomendado de segundos, vuelva a intentarlo. | |
500 | Service_InternalServerError | El servidor detectó un error interno. | Error interno del servidor al procesar la solicitud. |
502 | [Todo] | “... Servicio no disponible..." | Un servidor que actúa como puerta de enlace o proxy encontró un error de otro servidor al procesar la solicitud. Espere unos minutos y reintente la solicitud. |
503 | Directory_ConcurrencyViolation | Error debido a que se realizan solicitudes simultáneas con el inquilino. Espere brevemente e inténtelo de nuevo. | |
503 | Error durante la comprobación de DNS (Nota: Puede deberse a varias razones, por ejemplo, a que el DNS esté inactivo actualmente). | ||
Authentication_Unknown | Error interno del servidor. | Este código de error se utiliza cuando no se aplican otros códigos de error. | |
Authentication_UnsupportedTokenType | El tipo de token presentado no está controlado. Solo se admiten tokens de portador. | El tipo de token no se admite. Revise el tipo de token antes de intentar la solicitud de nuevo. | |
Directory_BindingRedirection | La información de inquilino no está disponible localmente. Utilice las direcciones URL siguientes para obtener la información. | Cuando la partición del inquilino no está disponible en el centro de datos, los clientes deben conectarse al URI devuelto en la respuesta. | |
Directory_BindingRedirectionInternalServerError | La información de inquilino no está disponible localmente. El servidor detectó un error interno al intentar rellenar los extremos del centro de datos más cercano. | Cuando se produce una excepción de redirección de enlace, se rellena la lista de extremos del centro de datos más cercano para el servicio. Este error indica una excepción al rellenar la lista. Intente de nuevo la consulta. | |
Directory_CompanyNotFound | No se puede leer la información de la compañía del directorio. | Error al cargar la información de la compañía del servicio de directorio. | |
Directory_ReplicaUnavailable | La réplica preferida no está disponible. Inténtelo de nuevo sin ningún encabezado de clave de sesión de réplica. | Omita el encabezado x-ms-replica-session-key y vuelva a intentarlo. | |
Headers_DataContractVersionMissing | Falta el encabezado de versión del contrato de datos. Incluya x-ms-dirapi-data-contract-version en la solicitud. | Falta la versión del contrato del cliente en la solicitud. | |
Headers_HeaderNotSupported | No se admite actualmente el encabezado {0}. | La solicitud contiene un encabezado HTTP no admitido. Cambie el encabezado e intente de nuevo la solicitud. | |
Request_InvalidReplicaSessionKey | La clave de sesión de réplica proporcionada no es válida. | Corrija la clave de sesión de réplica e intente de nuevo la solicitud. | |
Request_ThrottledPermanently | La solicitud está limitada permanentemente. Llame al servicio técnico para solucionar el problema. | El inquilino ha superado de forma repetida y persistente el límite de tasa de solicitud de tokens. Las solicitudes del inquilino se rechazarán hasta que se renegocie el servicio. Para obtener Ayuda, póngase en contacto con el soporte técnico de Microsoft. |