Hata Yanıtları

Bu sayfada User Deletion API'den alabileceğiniz hataların yanı sıra 500 hatalarının nasıl işleneceği ve üstel geri yüklemenin nasıl uygulanacağı açıklanmaktadır.

Standart hata yanıtları

User Deletion API isteği başarılı olursa API, 200 durum kodu döndürür. Bir istekle birlikte hata oluşursa API, hatanın türüne göre yanıtta bir HTTP durum kodu, durum ve neden döndürür. Ayrıca, yanıtın gövdesinde hataya neyin neden olduğuna dair ayrıntılı bir açıklama bulunur. Hata yanıtı örneği:

 { "error": { "errors": [ { "domain": "global", "reason": "invalidParameter",
"message": "Invalid value '-1' for max-results. Value must be within the range:
[1, 1000]", "locationType": "parameter", "location": "max-results" } ], "code":
400, "message": "Invalid value '-1' for max-results. Value must be within the
range: [1, 1000]" } }

Hata tablosu

Kod Neden Açıklama Önerilen işlem
400 invalidParameter Bir istek parametresinin geçersiz bir değere sahip olduğunu gösterir. Hata yanıtındaki locationType ve location alanları, hangi değerin geçersiz olduğuyla ilgili bilgi sağlar. Sorunu düzeltmeden tekrar denemeyin. Hata yanıtında belirtilen parametre için geçerli bir değer sağlamanız gerekir.
400 badRequest Sorgunun geçersiz olduğunu gösterir. Örneğin, üst kimlik eksikti veya istenen boyut ya da metrik kombinasyonu geçerli değildi. Sorunu düzeltmeden tekrar denemeyin. API sorgusunun çalışması için sorguda değişiklik yapmanız gerekir.
401 invalidCredentials Kimlik doğrulama jetonunun geçersiz olduğunu veya süresinin dolduğunu gösterir. Sorunu düzeltmeden tekrar denemeyin. Yeni bir kimlik doğrulama jetonu almanız gerekir.
403 insufficientPermissions Kullanıcının sorguda belirtilen varlık için yeterli izinlere sahip olmadığını belirtir. Sorunu düzeltmeden tekrar denemeyin. İşlemi belirtilen varlık üzerinde gerçekleştirmek için yeterli izinleri almanız gerekir.
403 dailyLimitExceeded Kullanıcının günlük kotayı aştığını belirtir (proje veya görünüm (profil) başına). Sorunu düzeltmeden tekrar denemeyin. Günlük kotanızı kullandınız. API Sınırları ve Kotaları başlıklı makaleyi inceleyin.
403 userRateLimitExceeded Kullanıcı başına 100 saniyede yapılabilecek sorgu sayısı sınırının aşıldığını gösterir. Google API Konsolu'nda varsayılan değer olarak kullanıcı başına 100 saniyede 100 sorgu ayarlanır. Google API Konsolu'nda bu sınırı en fazla 1.000'e çıkarabilirsiniz. Üstel geri yükleme kullanarak yeniden deneyin. İstekleri gönderme hızınızı yavaşlatmanız gerekir.
403 rateLimitExceeded Projenin 100 saniye başına sorgu oranı sınırlarının aşıldığını gösterir. Üstel geri yükleme kullanarak yeniden deneyin. İstekleri gönderme hızınızı yavaşlatmanız gerekir.
403 quotaExceeded Core Reporting API'de görüntüleme (profil) başına 10 eşzamanlı istek sınırına ulaşıldığını gösterir. Eksponansiyel geri yükleme özelliğini kullanarak yeniden deneyin. Bu görünümün (profil) tamamlanması için en az bir devam eden isteğin tamamlanmasını beklemeniz gerekir.
500 internalServerError Beklenmeyen dahili sunucu hatası oluştu. Bu sorguyu bir defadan fazla yeniden denemeyin.
503 backendError Sunucu hata döndürdü. Bu sorguyu birden fazla kez yeniden denemeyin.

500 veya 503 yanıtlarını işleme

Yoğun yük sırasında veya daha büyük ve daha karmaşık istekler için 500 veya 503 hatası oluşabilir. Daha büyük istekler için daha kısa bir döneme ait veri isteğinde bulunabilirsiniz. Ayrıca eksponansiyel geri yükleme uygulamayı da düşünebilirsiniz. Bu hataların sıklığı görünüm (profil) ve söz konusu görünümle ilişkili raporlama verilerinin miktarına bağlı olabilir. Bir görünüm (profil) için 500 veya 503 hatasına neden olan bir sorgu, aynı sorgu için farklı bir görünüm (profil) için hataya neden olmayabilir.

Eksponansiyel geri yükleme uygulama

Eksponansiyel geri yükleme, istemcinin başarısız bir isteği belirli aralıklarla tekrar denediği ve bu süreyi kademeli olarak uzattığı bir süreçtir. Bu, ağ uygulamaları için standart bir hata işleme stratejisidir. User Deletion API, başarısız istekleri yeniden denemeyi seçen istemcilerin bunu üstel geri çekilme kullanarak yapması beklentisiyle tasarlanmıştır. Üstel geri çekilme kullanmak, "zorunlu" olmasının yanı sıra bant genişliği kullanımının verimliliğini artırır, başarılı bir yanıt almak için gereken istek sayısını azaltır ve eşzamanlı ortamlarda isteklerin veri hızını en üst düzeye çıkarır.

Eksponansiyel geri yüklemenin nasıl uygulanacağı aşağıda açıklanmıştır:

  1. API'ye istekte bulunun.
  2. Yeniden denenebilir hata kodu içeren bir hata yanıtı alın.
  3. 1 saniye + random_number_milliseconds saniye bekleyin.
  4. İsteği yeniden dene.
  5. Yeniden denemeye uygun bir hata kodu içeren bir hata yanıtı alırsınız.
  6. 2 saniye + random_number_milliseconds saniye bekleyin.
  7. İsteği yeniden deneyin.
  8. Tekrar denemeye uygun bir hata kodu içeren bir hata yanıtı alırsınız.
  9. 4 sn + random_number_milliseconds saniye bekleyin.
  10. İsteği yeniden deneyin.
  11. Yeniden denemeye uygun bir hata kodu içeren bir hata yanıtı alırsınız.
  12. 8 saniye + random_number_milliseconds saniye bekleyin.
  13. İsteği yeniden deneyin.
  14. Yeniden denemeye uygun bir hata kodu içeren bir hata yanıtı alırsınız.
  15. 16 saniye + random_number_milliseconds saniye bekleyin.
  16. İsteği yeniden deneyin.
  17. Hâlâ hata alıyorsanız işlemi durdurun ve hatayı kaydedin.

Önceki akışta random_number_milliseconds, 1.000'den küçük veya 1.000'e eşit olan rastgele bir milisaniye sayısıdır. Bu, bazı eşzamanlı uygulamalarda belirli kilitleme hatalarını önlemek için gereklidir. random_number_milliseconds her bekleme işleminden sonra yeniden tanımlanmalıdır.

Algoritma, n 5 olduğunda sonlandırılacak şekilde ayarlanmıştır. Bu sınır yalnızca istemcilerin sonsuz bir şekilde yeniden denemesini önlemek için uygulanır ve bir isteğin "kurtarılamaz hata" olarak değerlendirilmesinden önce toplam 32 saniyelik bir gecikmeye neden olur.

Aşağıdaki Python kodu, makeRequest adlı bir yöntemde oluşan hatalardan kurtarma işlemi için önceki akışın bir uygulamasıdır.

import random
import time
from apiclient.errors import HttpError

def makeRequestWithExponentialBackoff(analytics):
  """Wrapper to request Google Analytics data with exponential backoff.

  The makeRequest method accepts the analytics service object, makes API
  requests and returns the response. If any error occurs, the makeRequest
  method is retried using exponential backoff.

  Args:
    analytics: The analytics service object

  Returns:
    The API response from the makeRequest method.
  """
  for n in range(0, 5):
    try:
      return makeRequest(analytics)

    except HttpError, error:
      if error.resp.reason in ['userRateLimitExceeded', 'quotaExceeded',
                               'internalServerError', 'backendError']:
        time.sleep((2 ** n) + random.random())
      else:
        break

  print "There has been an error, the request never succeeded."