API hatalarını işleme

Calendar API iki düzeyde hata bilgisi döndürür:

  • Üstbilgideki HTTP hata kodları ve mesajları
  • Yanıt gövdesinde, size yardımcı olabilecek ek ayrıntılar içeren bir JSON nesnesi ve hatanın nasıl ele alınacağını belirler.

Bu sayfanın geri kalanında Takvim hataları için referans verilmiştir. Bazı bunları uygulamanızda kullanma konusunda yol gösterici bilgiler edinebilirsiniz.

Eksponansiyel geri yükleme uygulama

İlgili içeriği oluşturmak için kullanılan Cloud APIs belgeleri üstel geri çekilme hakkında iyi bir açıklamaya ve Google Analytics 4'teki API'ler.

Hatalar ve önerilen işlemler

Bu bölümde, listelenen her bir bileşenin tam JSON gösterimi ve bu hatanın üstesinden gelmek için yapabileceğiniz işlemler önerilmiştir.

400: Hatalı İstek

Kullanıcı hatası. Bu, zorunlu bir alan veya parametrenin sağlanmışsa, sağlanan değer geçersiz veya sağlanan alanların kombinasyonu geçersiz.

{
 "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."
 }
}

Önerilen işlem: Bu kalıcı bir hata olduğundan tekrar denemeyin. Hata mesajını okuyun ve isteğinizi buna göre değiştirin.

401: Geçersiz Kimlik Bilgileri

Geçersiz yetkilendirme üstbilgisi. Kullandığınız erişim jetonunun süresi dolmuş veya jetonu geçersiz.

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

Önerilen işlemler:

  • Uzun ömürlü yenileme jetonunu kullanarak yeni bir erişim jetonu alın.
  • Bu işlem başarısız olursa kullanıcıyı OAuth akışı üzerinden yönlendirin: OAuth 2.0 ile istekleri yetkilendirme.
  • Bunu bir hizmet hesabı için görüyorsanız TV'nizde adımların tümünü başarıyla tamamladık hizmet hesabı sayfası.

403: Kullanıcı Oranı Sınırı Aşıldı

Developer Console'un sınırlarından birine ulaşıldı.

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

Önerilen işlemler:

403: Hız Sınırı Aşıldı

Kullanıcı, Google Calendar API'nin takvim başına maksimum istek oranına ulaştı veya kimliği doğrulanmış kullanıcı başına gösterilir.

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

Önerilen işlem: rateLimitExceeded hataları 403 veya 429 hatası döndürebilir hata kodları (şu anda işlevsel olarak benzerdir ve yanıtlanması gerekir) Aynı şekilde üstel geri yükleme yöntemini kullanarak. Ayrıca, uygulamanızın şuralardaki en iyi uygulamalara uyduğundan emin olun: kotaları yönetebilirsiniz.

403: Takvim kullanım sınırları aşıldı

Kullanıcı, Google'ı korumak için uygulanan Google Takvim sınırlarından birine ulaştı kullanıcıları ve altyapıları kötüye kullanıma karşı korur.

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

Önerilen işlemler:

403: Düzenleyen olmayan kullanıcı için yasak

Etkinlik güncelleme isteği, paylaşılan etkinlik özelliklerinden birini ayarlamaya çalışıyor başka bir belgeye eklemeniz gerekir. Paylaşılan mülkler (örneğin, guestsCanInviteOthers, guestsCanModify veya guestsCanSeeOtherGuests) şunları yapabilir: yalnızca düzenleyen kişi tarafından ayarlanmalıdır.

{
 "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."
 }
}

Önerilen işlemler:

404: Bulunamadı

Belirtilen kaynak bulunamadı. Bu birkaç durumda gerçekleşebilir. Aşağıda birkaç örnek verilmiştir:

  • İstenen kaynak (sağlanan kimlikle) hiçbir zaman mevcut olmadığında
  • Kullanıcının erişemeyeceği bir takvime erişirken

    { "error": { "errors": [ { "domain": "global", "reason": "Bulunamadı", "message": "Bulunamadı" } ], "code": 404, "message": "Bulunamadı" } }

Önerilen işlem: Eksponansiyel geri yükleme kullanın.

409: İstenen tanımlayıcı zaten mevcut

Belirtilen kimliğe sahip bir örnek depolama alanında zaten var.

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

Önerilen işlem: Yeni bir örnek oluşturmak istiyorsanız yeni bir kimlik oluşturun. Aksi takdirde update yöntem çağrısı.

409: Çakışma

Bir öğenin toplu haldeki events.batch İşlem, istenen diğer cihazla operasyonel çakışma nedeniyle yürütülemiyor toplu olarak işler.

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

Önerilen işlem: Başarıyla tamamlanan ve kesinlikle tamamlanan tümünü hariç tut toplu olarak başarısız oldu ve kalanları farklı bir events.batch içinde tekrar deneyin veya bunlara karşılık gelen tek etkinlik işlemleri.

410: Gitti

syncToken veya updatedMin parametreleri artık geçerli değil. Bu hata ayrıca İstek, silinmiş bir etkinliği silmeye çalıştığında gerçekleşir.

{
 "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."
 }
}

veya

{
 "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."
 }
}

veya

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

Önerilen işlem: syncToken veya updatedMin parametreleri için depolayıp yeniden senkronize edebilirsiniz. Daha fazla bilgi için bkz. Kaynakları Verimli Şekilde Senkronize Edin. Silinmiş etkinlikler için başka bir işlem yapmanız gerekmez.

412: Önceden Koşullandırma Başarısız Oldu

If-match üstbilgisinde sağlanan etag artık geçerli kaynağın etag'i.

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

Önerilen işlem: Öğeyi yeniden getirin ve değişiklikleri yeniden uygulayın. Ayrıntılı bilgi için Kaynakların belirli sürümlerini alma bölümüne bakın.

429: Çok fazla istek

rateLimitExceeded hatası, kullanıcı bir öğede çok fazla istek gönderdiğinde süre tahminidir.

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

Önerilen işlem: rateLimitExceeded hataları 403 veya 429 hatası döndürebilir hata kodları (şu anda işlevsel olarak benzerdir ve yanıtlanması gerekir) Aynı şekilde üstel geri yükleme yöntemini kullanarak. Ayrıca, uygulamanızın şuralardaki en iyi uygulamalara uyduğundan emin olun: kotaları yönetebilirsiniz.

500: Arka Uç Hatası

İstek işlenirken beklenmeyen bir hata oluştu.

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

Önerilen işlem: Eksponansiyel geri yükleme kullanın.