Обработка ошибок для API Excel

В этой статье приводятся общие инструкции и рекомендации по обработке ошибок, возвращаемых API Excel в Microsoft Graph при сбое запроса, отправленного через API.

Типы ответов на ошибки

API Excel в Microsoft Graph возвращают два типа ошибок. Один из них — это обычный ответ об ошибке, который выглядит следующим образом.

HTTP/1.1 <HTTP status code>
Content-type: application/json
Retry-After: <Cooldown duration in seconds> (optional)

{
  "error": <Error object>
}

Второй — из шаблона длительных операций, который может возвращать 200 OK код состояния HTTP и failed состояние операции в тексте ответа, как показано в следующем примере.

HTTP/1.1 200 OK
Content-type: application/json

{
  "status": "failed",
  "error": <Error object>
}

Для обоих этих ответов на ошибки объект error имеет следующую структуру.

Примечание.

Сообщения об ошибках соответствуют определению в спецификации OData версии 4.

{
  "code": "string",
  "message": "string",
  "innerError": { "@odata.type": "odata.error" }
}

Объект innerError может рекурсивно содержать больше объектов innerError с дополнительными, более конкретными кодами ошибок. Например, объект error может содержать более подробные сведения об ошибке в коде ошибки второго уровня и сообщении, как показано ниже.

{
  "code": "Top-level error code",
  "message": "Top-level error message",
  "innerError": {
    "code": "Second-level error code",
    "message": "Second-level error message",
    "innerError": { "@odata.type": "odata.error" }
  }
}

Действия по обработке ответов об ошибках

Ожидается, что клиенты Microsoft Graph будут использовать следующие действия для обработки ошибок, возникающих с API Excel.

1. Определите, является ли это ошибкой длительной операции

Прежде чем обрабатывать ошибку, сначала необходимо определить, является ли ответ на ошибку шаблоном длительной операции или регулярным шаблоном. Долго выполняющаяся ошибка операции вернет 200 OK код состояния HTTP и failed состояние операции в тексте ответа. Обычный ответ об ошибке возвращает соответствующий код состояния ошибки HTTP.

2. Анализ кода ошибки второго уровня

Клиент должен сначала проанализировать требуемые коды ошибок второго уровня и обработать их в соответствии с инструкциями. При необходимости клиент также может обрабатывать другие коды ошибок второго уровня или использовать коды ошибок верхнего уровня или коды состояния.

Коды ошибок не учитывают регистр.

Обязательные коды ошибок второго уровня

В следующей таблице перечислены инструкции для обязательных кодов ошибок второго уровня, которые должны обрабатывать клиенты Microsoft Graph. Служба может добавить новые коды ошибок в любое время.

Код Инструкции
accessConflict Неудачный запрос конфликтует с другими клиентами, обращаюющимися к книге (например, другой клиент заблокировал книгу для редактирования). Клиент Microsoft Graph не должен повторно отправлять неудачный запрос, пока конфликт не будет разрешен. Пользователь может вручную выполнить те же операции в Excel Online, чтобы получить дополнительные сведения о конфликте.
badRequestUncategorized В неудачном запросе обнаружена неуказаная ошибка. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос.
conflictUncategorized Неудачный запрос конфликтует с определенным состоянием сервера. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос, пока конфликт не будет разрешен. Пользователь может вручную выполнить те же операции в Excel Online, чтобы получить дополнительные сведения о конфликте.
forbiddenUncategorized Неудачный запрос запрещен. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос. Пользователь может вручную выполнить те же операции в Excel Online, чтобы получить дополнительные сведения об ограничениях.
gatewayTimeoutUncategorized Служба не смогла выполнить запрос в течение ограниченного времени.
internalServerErrorUncategorized Произошла неуказанная ошибка. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос. Если сеанс указан в неудачном запросе, дальнейший доступ к сеансу также не ожидается.
invalidSessionAccessConflict Сеанс, указанный в запросе, недопустим из-за конфликтов с другими клиентами, которые обращаются к книге (например, другой клиент заблокировал книгу для редактирования). Дальнейший доступ к сеансу, указанному в неудачном запросе, не ожидается. Повторное создание сеансов с тем же запросом createSession не ожидается, пока конфликт не будет разрешен. Повторное создание сеансов с другим запросом createSession может завершиться ошибкой. Пользователь может вручную выполнить те же операции в Excel Online, чтобы получить дополнительные сведения о конфликте.
invalidSessionAuthentication Сеанс, указанный в запросе, недопустим из-за ошибки проверки подлинности. Дальнейший доступ к сеансу, указанному в неудачном запросе, не ожидается. Повторное создание сеансов с тем же запросом createSession не ожидается, пока не будут предоставлены соответствующие сведения о проверке подлинности.
invalidSessionNotFound Сеанс, указанный в запросе, недопустим, так как не удается найти книгу. Дальнейший доступ к сеансу, указанному в неудачном запросе, не ожидается. Повторное создание сеансов с тем же запросом createSession не ожидается.
invalidSessionReCreatable Сеанс, указанный в запросе, не существует или недопустим из-за временной ошибки. Клиент Microsoft Graph может попытаться воссоздать сеанс и возобновить работу. Дальнейший доступ к сеансу, указанному в неудачном запросе, не ожидается.
invalidSessionRestricted Сеанс, указанный в запросе, недопустим из-за конфигураций службы или ограничений. Дальнейший доступ к сеансу, указанному в неудачном запросе, не ожидается. Повторное создание сеансов с тем же запросом createSession не ожидается до изменения ограничений или конфигураций, блокирующих запрос. Повторное создание сеансов с другим запросом createSession может завершиться ошибкой. Пользователь может вручную выполнить те же операции в Excel Online, чтобы получить дополнительные сведения об ограничениях.
invalidSessionUnexpected Сеанс, указанный в запросе, недопустим из-за непредвиденной проблемы. Дальнейший доступ к сеансу, указанному в неудачном запросе, не ожидается. Повторное создание сеансов с тем же запросом createSession не ожидается. Повторное создание сеансов с другим запросом createSession может завершиться ошибкой.
invalidSessionUnsupportedWorkbook Сеанс, указанный в запросе, недопустим, так как книга содержит неподдерживаемые функции или превышает ограничение на размер. Как правило, неподдерживаемые факторы вводятся другим клиентом, обращаюющимся к книге. Дальнейший доступ к сеансу, указанному в неудачном запросе, не ожидается. Повторное создание сеансов с тем же запросом createSession не ожидается, пока не будут удалены неподдерживаемые факторы. Повторное создание сеансов с другим запросом createSession может завершиться ошибкой. Пользователь может вручную выполнить те же операции в Excel Online, чтобы получить дополнительные сведения о неподдерживаемых факторах, или в классическом приложении Excel, где может поддерживаться книга.
methodNotAllowedUncategorized Метод HTTP, указанный в запросе, не разрешен для ресурса. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос.
notFoundUncategorized Не удается найти запрошенный ресурс. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос.
notImplementedUncategorized Запрошенная функция в настоящее время не реализована. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос.
payloadTooLargeUncategorized Полезные данные запроса превышают предельный размер. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос.
serviceUnavailableUncategorized Служба временно недоступна или перегружена. Ожидается, что клиент Microsoft Graph не будет повторно отправлять неудачный запрос до тех пор, пока не пройдет указанная длительность cooldown.
tooManyRequestsUncategorized Сбой запроса превышает определенное ограничение частоты. Ожидается, что клиент Microsoft Graph не будет повторно отправлять неудачный запрос до тех пор, пока не пройдет указанная длительность cooldown. Рекомендации по сокращению регулирования см. в статье Уменьшение ошибок регулирования.
transientFailure Сбой запроса из-за временной ошибки. Ожидается, что клиент Microsoft Graph не будет повторно отправлять неудачный запрос до тех пор, пока не пройдет указанная длительность cooldown.
unauthorizedUncategorized Необходимые сведения о проверке подлинности для ресурса либо отсутствуют, либо недопустимы. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос.
unsupportedWorkbook Сбой запроса. Книга содержит неподдерживаемые функции или превышает ограничение на размер. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос до тех пор, пока не будут удалены неподдерживаемые факторы.

Примечание.

Для обычного шаблона неудачный запрос определяется как запрос, соответствующий ответу. Для шаблона длительных операций сбойный запрос является тем, который активирует неудачную операцию.

Необязательные примеры кода ошибки второго уровня

В следующей таблице приведены примеры необязательных кодов ошибок второго уровня, включая соответствующие инструкции по обработке для каждого кода ошибки. Служба может добавить новые коды ошибок в любое время.

Код Инструкции
accessDenied Вы не можете выполнить запрошенную операцию (например, изменение заблокированных ячеек). Клиент Microsoft Graph не должен повторно отправлять неудачный запрос.
filteredRangeConflict Сбой операции, так как она конфликтует с отфильтрованным диапазоном. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос.
generalException Во время обработки запроса произошла внутренняя ошибка. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос.
insertDeleteConflict Операция вставки или удаления привела к конфликту. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос. Пользователь может вручную выполнить те же операции в Excel Online, чтобы получить дополнительные сведения о конфликте.
invalidArgument Аргумент недопустим, отсутствует или имеет неправильный формат. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос.
invalidReference Эта ссылка недопустима для текущей операции. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос.
itemAlreadyExists Создаваемый ресурс уже существует. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос.
itemNotFound Запрашиваемый ресурс не существует. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос.
methodNotAllowed Метод HTTP, указанный в запросе, не разрешен для ресурса. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос.
nonBlankCellOffSheet Не удается вставить новые ячейки, так как это приведет к отправке непустых ячеек с конца листа. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос. Пользователь может удалить строки или столбцы, чтобы освободить место для вставки содержимого, а затем повторить попытку.
rangeExceedsLimit Число ячеек в диапазоне превысило максимальное поддерживаемого числа. Клиент Microsoft Graph может попытаться отправить запрос с меньшим размером диапазона. Дополнительные сведения см. в разделе Ограничения ресурсов и оптимизация производительности для надстроек Office.
requestAborted Запрос был прерван во время выполнения, что обычно было вызвано длительным вычислением из функций в книге. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос.
unsupportedOperation Выполняемая операция не поддерживается. Клиент Microsoft Graph не должен повторно отправлять неудачный запрос.

Примечание.

Для обычного шаблона неудачный запрос определяется как запрос, соответствующий ответу. Для шаблона длительных операций сбойный запрос является тем, который активирует неудачную операцию.

3. Анализ кода ошибки верхнего уровня

Если вы не можете найти известный код ошибки второго уровня, следуйте инструкциям, приведенным для ошибок верхнего уровня. Коды ошибок верхнего уровня привязаны к коду состояния, и вы можете выполнить действия в соответствии с соответствующими кодами состояния. Дополнительные сведения о кодах ошибок и сообщениях верхнего уровня см. в разделе Коды ошибок и сообщения.

4. Анализ кода состояния

Если в обычном шаблоне не удалось найти известный код ошибки второго уровня или код ошибки верхнего уровня, следует выполнить действия в соответствии с кодом состояния HTTP.

5. Ошибка при восстановлении

Для некоторых ответов в обычном шаблоне длительность восстановления в секундах может быть предоставлена с помощью заголовка Retry-After . При наличии длительности восстановления для восстановления клиент Microsoft Graph не должен отправлять запросы на выполнение до истечения указанной длительности. Рекомендации по управлению Retry-After заголовками и регулированием см. в статье Уменьшение ошибок регулирования.

Диагностические сведения

Все содержимое в ответе, которое не использовалось на предыдущих шагах, предназначено только для диагностика целей (включая строки в полях сообщения). Не рекомендуется полагаться на это содержимое, так как оно может измениться без уведомления.

Обработка особых случаев

При возникновении ошибки или 503/serviceUnavailable при обнаружении известного 502/badGateway кода ошибки второго уровня при выполнении сеансовых запросов следуйте соответствующим инструкциям; в противном случае следует напрямую воссоздать сеанс.