Поделиться через


Коды ошибок и обработка ошибок | Основные понятия API Graph

Область применения: API Graph | Azure Active Directory

Клиентские приложения, использующие API Graph Azure Active Directory (AD), должны применять логику обработки ошибок, чтобы максимально эффективно реагировать на меняющиеся условия и предоставлять наилучшее взаимодействие для своих клиентов. В этой статье рассматриваются типы ошибок, которые возвращает API Graph Azure AD, и даются общие рекомендации по их обработке.

Важно!

Для доступа к ресурсам Azure Active Directory мы настоятельно рекомендуем использовать Microsoft Graph вместо API Azure AD Graph.Теперь наши усилия сфокусированы на разработке Microsoft Graph; дальнейшее продвижение API Azure AD Graph мы не планируем.Есть очень мало сценариев, в которых по-прежнему можно использовать API Azure AD Graph. Дополнительные сведения об этом см. в записи блога в центре разработчиков Office, где сравниваются решения Microsoft Graph и Azure AD Graph.

Обработка ошибок API Graph

Типы ошибок

Ошибки Graph API подразделяются на следующие категории.

  • Ошибки клиента. Ошибки клиента представлены кодами состояния HTTP 400-й серии. Сюда входят объекты с неправильными значениями, объекты, у которых отсутствуют необходимые свойства или значения свойств, попытки доступа к несуществующему ресурсу, попытки обновления свойств, предназначенных только для чтения, и пропуск обязательного токена авторизации. Для устранения таких ошибок исправьте указанную проблему и повторите запрос.
  • Ошибки сервера. Ошибки сервера, такие как временный сбой каталога, представлены кодами состояния HTTP 500-й серии. Большинство этих ошибок временные, и для их устранения можно просто повторить запрос.
  • Ошибки сети и протокола. При отправке запроса или получении ответа могут возникать различные ошибки, связанные с сетью, такие как ошибки разрешения имен узлов, преждевременно закрытые соединения и ошибки согласования по протоколу SSL. Большинство этих ошибок не устраняется путем повторения запроса; указанную проблему необходимо исправить. Однако некоторые ошибки, например сбой разрешения имени узла или истечение времени ожидания, можно устранить, повторив запрос.

Структура сообщения об ошибке

Ошибки Graph API имеют форматированный текст, состоящий из кода состояния HTTP, сообщения и значений. Используйте свойства текста ошибки в логике обработки ошибок.

Примечание. Некоторые HTTP-ответы могут не включать текст ответа с кодом, сообщением или значениями, поскольку запрос направляется через службы прокси-сервера и шлюза. Убедитесь, что включили логику по умолчанию, которая может обрабатывать ошибки на основе только кода состояния HTTP.

Далее приводится пример ошибки 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
    }
 }

Текст сообщения всегда содержит код, сообщение и свойства.

  • Код: создайте ветку логики обработки ошибок на основе кода.

    "code" : "Request_BadRequest"
    
  • Сообщение: набор, состоящий из текста и значений, который представляет понятное сообщение об ошибке. Содержимое находится в поле значения. В следующем примере происходит сбой запроса, поскольку отсутствует значение свойства mailNickname.

    "message" : {
         "lang" : "en",
         "value" : "A value is required for property 'mailNickname' of resource 'Group'."
    }
    
  • Значения: набор пар "имя-значение", предоставляющий дополнительные сведения о природе сбоя. В следующем примере никаких значений нет.

    "values" : null
    

Справочник по кодам ошибок

Коды ошибок HTTP

В следующей таблице перечислены коды ошибок API Graph, сообщения об ошибках и действия по их устранению.

В целом ошибки серии HTTP 500 связаны с повторными попытками, распределенными по увеличивающимся интервалам времени («повтор с интервалом отсрочки») и со случайным коэффициентом распределения. Ошибки серии 400 указывают на проблему, которую необходимо устранить перед выполнением повторной попытки.

Код состояния HTTP Код ошибки Сообщение об ошибке Подробные сведения
400 Directory_ExpiredPageToken Срок действия токена указанной страницы истек и больше не может использоваться в запросе.  
400 Directory_ResultSizeLimitExceeded Превышено ограничение размера результата Запрос не может быть выполнен, поскольку он связан со слишком большим числом результатов.Эта ошибка происходит очень редко.
400 DomainVerificationCodeNotFound   Произошла ошибка проверки домена, так как в процессе проверки не удается найти запись TXT с соответствующим кодом проверки.
400 ObjectConflict Имя домена уже существует в непроверенном домене в этой организации.  
400 ObjectConflict Имя домена уже существует в проверенном домене в этой организации.  
400 ObjectInUse Не удается удалить домен, на который уже ссылается пользователь, группа или мультитенантное приложение.  
400 ObjectPendingDeletion   Не удается проверить существующий домен, который ожидает удаления.
400 ObjectPendingTakeover Не удается удалить домен в процессе перехвата клиента.  
400 Request_BadRequest Ошибочный запрос.Исправьте запрос перед повтором. Указывает на ошибку в запросе, например недопустимое значение свойства или аргумент запроса, который не поддерживается.Исправьте запрос перед повтором.
400 Request_DataContractVersionMissing Не указан параметр версии контракта данных.В качестве параметра запроса добавляйте во все запросы значение api-version.  
400 Request_InvalidDataContractVersion Указано недопустимое значение api-version.Значение должно точно соответствовать поддерживаемой версии.  
400 Request_InvalidRequestUrl Недопустимый URL-адрес запроса.Запрос должен быть в формате /tenantdomainname/Entity или /$metadata.В качестве имени домена клиента можно использовать любое проверенное или непроверенное имя домена или идентификатор контекста.  
400 Request_UnsupportedQuery   Запрос GET не поддерживается.Исправьте параметры запроса и повторите попытку.
401 Authentication_ExpiredToken Срок действия токена доступа истек.Обновите его перед отправкой запроса. Срок действия токена доступа истек.Обновите токен и отправьте его снова.
401 Authentication_MissingOrMalformed Токен доступа отсутствует или имеет неправильный формат. Значение access_token в заголовке авторизации отсутствует или имеет неправильный формат.Это значение является обязательным.Используйте это значение в токене проверки подлинности.
401 Authorization_IdentityDisabled Участник вызывающего приложения отключен. Участник, указанный в токене доступа, находится в каталоге, но он отключен.Повторно включите учетную запись в каталоге и повторите попытку.
401 Authorization_IdentityNotFound Не удалось установить удостоверение вызывающего приложения. Участник, указанный в токене доступа, не был найден в каталоге.Это может произойти из-за того, что токен устарел, участник был удален из каталога или синхронизация каталогов была задержана.
403 Authentication_Unauthorized Запрос не авторизован. Токен содержит недопустимые или неподдерживаемые утверждения.Получите токен запроса еще раз и повторите запрос.
403 Authorization_RequestDenied Указанные учетные данные не имеют достаточно прав для этого запроса. Запрос отклонен из-за недостатка прав.Например, у участника, не являющегося администратором, нет разрешения на удаление ресурса.
403 Directory_QuotaExceeded Была превышена квота объекта каталога для {tenantName}.Попросите администратора увеличить квоту или удалить объекты для уменьшения используемой квоты. Была превышена квота каталога.Возможно, что у клиента слишком много объектов или у объектов слишком много значений.Это также происходит, если для участника создано слишком много объектов.Увеличьте максимально допустимое число объектов для клиента или участника или уменьшите количество значений, включенных в запрос создания или обновления.
404 Directory_ObjectNotFound Не удалось прочитать сведения об организации из каталога.  
404 Request_ResourceNotFound Ресурс {resource} не существует, или отсутствует один из запрошенных объектов ссылочных свойств. Ресурс, определенный URI, не существует.Измените значение и повторите запрос.
409 Request_MultipleObjectsWithSameKeyValue Ожидалось, что результат будет содержать один ресурс, однако найдено несколько ресурсов.Чтобы разрешить конфликт, обновите объекты. Эта ошибка может возникать при наличии двух и более объектов с одинаковым значением ключа (например, когда два пользователя используют одно имя участника-пользователя).
429   Слишком много запросов. Эта ошибка возникает, когда запросы регулируются.Рекомендуемое время ожидания возвращается в значении Retry-After заголовка ответа.Повторите запрос после рекомендуемого времени ожидания (указано в секундах).
500 Service_InternalServerError Обнаружена внутренняя ошибка сервера. Внутренняя ошибка сервера при обработке запроса.
502 [All] “... Служба недоступна...» Сервер, действующий как шлюз или прокси-сервер, обнаружил ошибку от другого сервера при обработке запроса.Подождите несколько минут, а затем повторите запрос.
503 Directory_ConcurrencyViolation Ошибка, возникающая из-за одновременных запросов к клиенту.Подождите немного и повторите попытку.  
503   Ошибка при проверке DNS (она может вызываться различными причинами; например, DNS находится в неработоспособном состоянии).  
  Authentication_Unknown Внутренняя ошибка сервера. Этот код ошибки используется, если другие коды ошибки неприменимы.
  Authentication_UnsupportedTokenType Предоставленный тип токена не обрабатывается.Поддерживаются только токены носителя. Этот тип токена не поддерживается.Измените тип токена перед повтором запроса.
  Directory_BindingRedirection Сведения о клиенте недоступны локально.Используйте следующие URL-адреса, чтобы получить сведения. Если раздел клиента недоступен в центре обработки данных, клиенты должны подключаться к URL-адресу, возвращенному в ответе.
  Directory_BindingRedirectionInternalServerError Сведения о клиенте недоступны локально.При попытке заполнить ближайшие конечные точки центра обработки данных на сервере возникла внутренняя ошибка. При возникновении исключения перенаправления привязки заполняется список ближайших конечных точек центра обработки данных клиента для службы.Эта ошибка указывает на исключение, возникшее при заполнении списка.Попробуйте выполнить запрос еще раз.
  Directory_CompanyNotFound Не удалось прочитать сведения об организации из каталога. При загрузке сведений об организации из службы каталогов произошла ошибка.
  Directory_ReplicaUnavailable Предпочитаемая реплика отсутствует.Повторите попытку без заголовка ключа сеанса реплики. Пропустите заголовок ключа x-ms-replica-session, а затем повторите попытку.
  Headers_DataContractVersionMissing Заголовок версии контракта данных недоступен.Включите x-ms-dirapi-data-contract-version в запрос. Версия контракта клиента отсутствует в запросе.
  Headers_HeaderNotSupported Заголовок {0} не поддерживается в текущей версии. Запрос содержит неподдерживаемый заголовок HTTP.Измените заголовок и повторите запрос.
  Request_InvalidReplicaSessionKey Указан недопустимый ключ сеанса реплики. Исправьте ключ сеанса реплики и повторите запрос.
  Request_ThrottledPermanently Ваш запрос регулируется постоянно.Для устранения этой проблемы обратитесь в службу поддержки. Клиент повторно и постоянно превышает ограничение частоты запросов токена.Запросы от клиента отклоняются, пока служба не будет согласована.За помощью обратитесь в службу технической поддержки Майкрософт.

Дополнительные ресурсы