Solucionar erros de API

A API Google Agenda retorna dois níveis de informações de erro:

  • Mensagens e códigos de erro HTTP no cabeçalho
  • Um objeto JSON no corpo da resposta com mais detalhes que podem ajudar você a determinar como lidar com o erro.

O restante desta página fornece uma referência de erros do Agenda, com algumas orientações sobre como lidar com eles no seu app.

Implementar a espera exponencial

A documentação do Google Cloud Storage explica a espera exponencial e como usá-la com as APIs do Google.

Erros e ações sugeridas

Esta seção fornece a representação JSON completa de cada erro listado e as ações sugeridas que você pode realizar para lidar com ele.

400: Solicitação inválida

Erro de usuário. Esse erro ocorre quando você não fornece um campo ou parâmetro obrigatório, fornece um valor inválido ou uma combinação inválida de campos.

{
  "error": {
    "errors": [
      {
        "domain": "calendar",
        "reason": "timeRangeEmpty",
        "message": "The specified time range is empty.",
        "locationType": "parameter",
        "location": "timeMax"
      }
    ],
    "code": 400,
    "message": "The specified time range is empty."
  }
}

Ação sugerida:como esse é um erro permanente, não tente de novo. Leia a mensagem de erro e mude sua solicitação de acordo com ela.

401: credenciais inválidas

Cabeçalho de autorização inválido. O token de acesso que você está usando expirou ou é inválido.

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "authError",
        "message": "Invalid Credentials",
        "locationType": "header",
        "location": "Authorization"
      }
    ],
    "code": 401,
    "message": "Invalid Credentials"
  }
}

Ações sugeridas :

403: o limite de taxa de usuário foi excedido

Um dos limites do console do Google Cloud foi atingido.

{
  "error": {
    "errors": [
      {
        "domain": "usageLimits",
        "reason": "userRateLimitExceeded",
        "message": "User Rate Limit Exceeded"
      }
    ],
    "code": 403,
    "message": "User Rate Limit Exceeded"
  }
}

Ações sugeridas :

403: limite de taxa excedido

O usuário atingiu a taxa máxima de solicitações da API Google Agenda por agenda ou por usuário autenticado.

{
  "error": {
    "errors": [
      {
        "domain": "usageLimits",
        "reason": "rateLimitExceeded",
        "message": "Rate Limit Exceeded"
      }
    ],
    "code": 403,
    "message": "Rate Limit Exceeded"
  }
}

Ação sugerida: rateLimitExceeded erros podem retornar códigos de erro 403 ou 429 —eles são funcionalmente semelhantes e precisam ser tratados da mesma maneira, usando a espera exponencial. Além disso, verifique se o app segue as práticas recomendadas de Gerenciar cotas.

403: limites de uso do Agenda excedidos

O usuário atingiu um dos limites do Agenda para proteger os usuários e a infraestrutura do Google contra comportamentos abusivos.

{
  "error": {
    "errors": [
      {
        "domain": "usageLimits",
        "message": "Calendar usage limits exceeded.",
        "reason": "quotaExceeded"
      }
    ],
    "code": 403,
    "message": "Calendar usage limits exceeded."
  }
}

Ações sugeridas :

403: proibido para não organizador

A solicitação de atualização do evento está tentando definir uma das propriedades do evento compartilhado em uma cópia que não é do organizador. Somente o organizador pode definir propriedades compartilhadas (por exemplo, guestsCanInviteOthers, guestsCanModify ou guestsCanSeeOtherGuests).

{
  "error": {
    "errors": [
      {
        "domain": "calendar",
        "reason": "forbiddenForNonOrganizer",
        "message": "Shared properties can only be changed by the organizer of the event."
      }
    ],
    "code": 403,
    "message": "Shared properties can only be changed by the organizer of the event."
  }
}

Ações sugeridas :

  • Se você estiver usando Eventos: inserir, Eventos: importar, ou Eventos: atualizar, e sua solicitação não incluir nenhuma propriedade compartilhada, isso será equivalente a tentar defini-las como os valores padrão. Considere usar Eventos: patch em vez disso.
  • Se a solicitação tiver propriedades compartilhadas, verifique se você está tentando mudar essas propriedades apenas se estiver atualizando a cópia do organizador.

404: não encontrado

O recurso especificado não foi encontrado. Isso pode acontecer em vários casos. Confira alguns exemplos:

  • Quando o recurso solicitado (com o ID fornecido) nunca existiu.
  • Ao acessar uma agenda que o usuário não pode acessar.
{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "notFound",
        "message": "Not Found"
      }
    ],
    "code": 404,
    "message": "Not Found"
  }
}

Ação sugerida: Use a espera exponencial.

409: o identificador solicitado já existe

Já existe uma instância com o ID fornecido no armazenamento.

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "duplicate",
        "message": "The requested identifier already exists."
      }
    ],
    "code": 409,
    "message": "The requested identifier already exists."
  }
}

Ação sugerida: Gere um novo ID se quiser criar uma nova instância. Caso contrário, use o events.update método.

409: conflito

Um item em lote dentro de uma events.batch operação não pode ser executado devido a um conflito operacional com outros itens em lote solicitados.

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "conflict",
        "message": "Conflict"
      }
    ],
    "code": 409,
    "message": "Conflict"
  }
}

Ação sugerida:remova os itens concluídos e com falha e tente novamente os itens restantes em uma operação events.batch diferente ou em operações de evento único correspondentes.

410: desaparecido

Os parâmetros syncToken ou updatedMin não são mais válidos. Esse erro também pode ocorrer se uma solicitação tentar excluir um evento que já foi excluído.

{
  "error": {
    "errors": [
      {
        "domain": "calendar",
        "reason": "fullSyncRequired",
        "message": "Sync token is no longer valid, a full sync is required.",
        "locationType": "parameter",
        "location": "syncToken"
      }
    ],
    "code": 410,
    "message": "Sync token is no longer valid, a full sync is required."
  }
}

ou

{
  "error": {
    "errors": [
      {
        "domain": "calendar",
        "reason": "updatedMinTooLongAgo",
        "message": "The requested minimum modification time lies too far in the past.",
        "locationType": "parameter",
        "location": "updatedMin"
      }
    ],
    "code": 410,
    "message": "The requested minimum modification time lies too far in the past."
  }
}

ou

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "deleted",
        "message": "Resource has been deleted"
      }
    ],
    "code": 410,
    "message": "Resource has been deleted"
  }
}

Ação sugerida:para os parâmetros syncToken ou updatedMin, limpe o armazenamento e resincronize. Para mais detalhes, consulte Sincronizar recursos com eficiência. Para eventos já excluídos, nenhuma outra ação é necessária.

412: falha na condição prévia

A ETag fornecida no cabeçalho If-Match não corresponde mais à ETag atual do recurso.

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "conditionNotMet",
        "message": "Precondition Failed",
        "locationType": "header",
        "location": "If-Match"
      }
    ],
    "code": 412,
    "message": "Precondition Failed"
  }
}

Ação sugerida:busque a entidade novamente e reaplique as mudanças. Para mais detalhes, consulte Receber versões específicas de recursos.

429: muitas solicitações

Um erro rateLimitExceeded ocorre quando o usuário enviou muitas solicitações em um determinado período.

{
  "error": {
    "errors": [
      {
        "domain": "usageLimits",
        "reason": "rateLimitExceeded",
        "message": "Rate Limit Exceeded"
      }
    ],
    "code": 429,
    "message": "Rate Limit Exceeded"
  }
}

Ação sugerida: rateLimitExceeded erros podem retornar códigos de erro 403 ou 429 —eles são funcionalmente semelhantes e precisam ser tratados da mesma maneira, usando a espera exponencial. Além disso, verifique se o app segue as práticas recomendadas de Gerenciar cotas.

500: erro de back-end

Ocorreu um erro inesperado ao processar a solicitação.

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "backendError",
        "message": "Backend Error"
      }
    ],
    "code": 500,
    "message": "Backend Error"
  }
}

Ação sugerida: Use a espera exponencial.