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:
- API'ye istekte bulunun.
- Yeniden denenebilir hata kodu içeren bir hata yanıtı alın.
- 1 saniye +
random_number_milliseconds
saniye bekleyin. - İsteği yeniden dene.
- Yeniden denemeye uygun bir hata kodu içeren bir hata yanıtı alırsınız.
- 2 saniye +
random_number_milliseconds
saniye bekleyin. - İsteği yeniden deneyin.
- Tekrar denemeye uygun bir hata kodu içeren bir hata yanıtı alırsınız.
- 4 sn +
random_number_milliseconds
saniye bekleyin. - İsteği yeniden deneyin.
- Yeniden denemeye uygun bir hata kodu içeren bir hata yanıtı alırsınız.
- 8 saniye +
random_number_milliseconds
saniye bekleyin. - İsteği yeniden deneyin.
- Yeniden denemeye uygun bir hata kodu içeren bir hata yanıtı alırsınız.
- 16 saniye +
random_number_milliseconds
saniye bekleyin. - İsteği yeniden deneyin.
- 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."