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, hatanın nasıl işleneceğini belirlemenize yardımcı olabilecek ek ayrıntılar içeren bir JSON nesnesi.

Bu sayfanın geri kalanında, bu hataların uygulamanızda nasıl ele alınacağına ilişkin rehberlikle birlikte Takvim hatalarına referans verilmiştir.

Eksponansiyel geri yükleme uygulama

Cloud APIs dokümanlarında eksponansiyel geri yükleme ve Google API'leriyle nasıl kullanılacağı ile ilgili iyi bir açıklama yer almaktadır.

Hatalar ve önerilen işlemler

Bu bölümde, listelenen her hatanın JSON gösterimi ve bu hatayı düzeltmek için yapabileceğiniz işlemler önerilmiştir.

400: Hatalı İstek

Kullanıcı hatası. Bu durum, zorunlu bir alanın veya parametrenin sağlanmadığı, sağlanan değerin veya sağlanan alan kombinasyonunun geçersiz olduğu anlamına gelebilir.

{
 "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 başarısız olursa kullanıcıyı OAuth 2.0 ile istekleri yetkilendirme başlıklı makalede açıklandığı gibi OAuth akışı üzerinden yönlendirin.
  • Bu mesajı bir hizmet hesabı için görüyorsanız hizmet hesabı sayfasındaki tüm adımları başarıyla tamamladığınızdan emin olun.

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 veya kimliği doğrulanmış kullanıcı başına maksimum istek oranına ulaşmıştır.

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

Önerilen işlem: rateLimitExceeded hataları 403 veya 429 hata kodları döndürebilir. Şu anda bu hatalar işlevsel olarak benzerdir ve üstel geri yükleme kullanılarak aynı şekilde yanıtlanmalıdır. Ayrıca, uygulamanızın kotaları yönetme sayfasındaki en iyi uygulamalara uyduğundan emin olun.

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

Kullanıcı, Google kullanıcılarını ve altyapısını kötüye kullanım davranışından korumak için geçerli olan Google Takvim sınırlarından birine ulaşmıştır.

{
 "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 düzenleyen kullanıcıya ait olmayan bir kopyada ayarlamaya çalışıyor. Paylaşılan özellikler (örneğin, guestsCanInviteOthers, guestsCanModify veya guestsCanSeeOtherGuests) yalnızca düzenleyen kişi tarafından ayarlanabilir.

{
 "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:

  • Events: insert (Etkinlik: ekle), Events: import (Etkinlik: içe aktarma) veya Events: update kullanıyorsanız ve isteğiniz paylaşılan herhangi bir özellik içermiyorsa bu, bunları varsayılan değerlerine ayarlamaya eşdeğerdir. Bunun yerine Events: yama etiketini kullanabilirsiniz.
  • İsteğinizde paylaşılan özellikler varsa bu özellikleri yalnızca düzenleyenin kopyasını güncelliyorsanız değiştirmeye çalıştığınızdan emin olun.

404: Bulunamadı

Belirtilen kaynak bulunamadı. Bu birkaç durumda gerçekleşebilir. Bazı örnekler:

  • İ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": "notBulunamadı", "message": "Bulunamadı" } ], "kod": 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ını kullanın.

409: Çakışma

events.batch işlemi içindeki toplu öğe, istenen diğer toplu öğelerle operasyonel çakışma nedeniyle yürütülemez.

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

Önerilen işlem: Başarıyla tamamlanan ve kesinlikle başarısız olan tüm toplu öğeleri hariç tutun ve kalanları farklı bir events.batch veya karşılık gelen tek etkinlik işlemlerinde yeniden deneyin.

410: Gitti

syncToken veya updatedMin parametreleri artık geçerli değil. Bu hata, bir istek silinmiş bir etkinliği silmeye çalıştığında da oluşabilir.

{
 "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 depoyu temizleyin ve yeniden senkronize edin. Daha fazla bilgi için Kaynakları Verimli Şekilde Senkronize Etme bölümüne bakın. Silinmiş etkinlikler için başka bir işlem yapmanız gerekmez.

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

If-match başlığında sağlanan etag artık kaynağın geçerli e etiketine karşılık gelmez.

{
 "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. Daha fazla bilgi için Kaynakların belirli sürümlerini alma bölümüne bakın.

429: Çok fazla istek

Kullanıcı belirli bir süre içinde çok fazla istek gönderdiğinde rateLimitExceeded hatası oluşur.

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

Önerilen işlem: rateLimitExceeded hataları 403 veya 429 hata kodları döndürebilir. Şu anda bu hatalar işlevsel olarak benzerdir ve üstel geri yükleme kullanılarak aynı şekilde yanıtlanmalıdır. Ayrıca, uygulamanızın kotaları yönetme sayfasındaki en iyi uygulamalara uyduğundan emin olun.

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.