Respons Error

Halaman ini mencantumkan error yang mungkin Anda terima dari User Deletion API, dan menjelaskan cara menangani error 500 dan menerapkan backoff eksponensial.

Respons error standar

Jika permintaan User Deletion API berhasil, API akan menampilkan kode status 200. Jika terjadi error pada permintaan, API akan menampilkan kode status HTTP, status, dan alasan dalam respons berdasarkan jenis error. Selain itu, isi respons berisi deskripsi mendetail tentang penyebab error. Berikut adalah contoh respons error:

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

Tabel error

Kode Alasan Deskripsi Tindakan yang Disarankan
400 invalidParameter Menunjukkan bahwa parameter permintaan memiliki nilai yang tidak valid. Kolom locationType dan location dalam respons error memberikan informasi tentang nilai mana yang tidak valid. Jangan mencoba lagi tanpa memperbaiki masalah. Anda harus memberikan nilai yang valid untuk parameter yang ditentukan dalam respons error.
400 badRequest Menunjukkan bahwa kueri tidak valid. Misalnya, ID induk tidak ada atau kombinasi dimensi atau metrik yang diminta tidak valid. Jangan mencoba lagi tanpa memperbaiki masalah. Anda perlu melakukan perubahan pada kueri API agar dapat berfungsi.
401 invalidCredentials Menunjukkan bahwa token autentikasi tidak valid atau sudah tidak berlaku. Jangan mencoba lagi tanpa memperbaiki masalah. Anda perlu mendapatkan token autentikasi baru.
403 insufficientPermissions Menunjukkan bahwa pengguna tidak memiliki izin yang memadai untuk entitas yang ditentukan dalam kueri. Jangan mencoba lagi tanpa memperbaiki masalah. Anda harus mendapatkan izin yang memadai untuk melakukan operasi pada entitas yang ditentukan.
403 dailyLimitExceeded Menunjukkan bahwa pengguna telah melampaui kuota harian (per project atau per tampilan (profil)). Jangan mencoba lagi tanpa memperbaiki masalah. Anda telah menggunakan kuota harian. Lihat Batas dan Kuota API.
403 userRateLimitExceeded Menunjukkan bahwa batas Kueri per 100 detik per pengguna telah terlampaui. Nilai default yang ditetapkan di Konsol API Google adalah 100 kueri per 100 detik per pengguna. Anda dapat meningkatkan batas ini di Konsol Google API hingga maksimum 1.000. Coba lagi menggunakan backoff eksponensial. Anda perlu memperlambat kecepatan pengiriman permintaan.
403 rateLimitExceeded Menunjukkan bahwa batas kapasitas kueri per 100 detik project telah terlampaui. Coba lagi menggunakan back-off eksponensial. Anda harus memperlambat kecepatan pengiriman permintaan.
403 quotaExceeded Menunjukkan bahwa 10 permintaan serentak per tampilan (profil) di Core Reporting API telah tercapai. Coba lagi menggunakan backoff eksponensial. Anda harus menunggu setidaknya satu permintaan yang sedang berlangsung untuk menyelesaikan tampilan (profil) ini.
500 internalServerError Terjadi error server internal yang tidak terduga. Jangan mencoba lagi kueri ini lebih dari sekali.
503 backendError Server menampilkan error. Jangan mencoba lagi kueri ini lebih dari sekali.

Menangani respons 500 atau 503

Error 500 atau 503 dapat terjadi selama beban berat atau untuk permintaan yang lebih besar dan lebih kompleks. Untuk permintaan yang lebih besar, pertimbangkan untuk meminta data selama periode waktu yang lebih singkat. Pertimbangkan juga untuk mengimplementasikan backoff eksponensial. Frekuensi error ini dapat bergantung pada tampilan (profil) dan jumlah data pelaporan yang terkait dengan tampilan tersebut; Kueri yang menyebabkan error 500 atau 503 untuk satu tampilan (profil) tidak selalu menyebabkan error untuk kueri yang sama dengan tampilan (profil) yang berbeda.

Menerapkan backoff eksponensial

Backoff eksponensial adalah proses klien yang secara berkala mencoba ulang permintaan yang gagal, dengan menambah lamanya penundaan antara setiap permintaan yang gagal. Ini adalah strategi penanganan error standar untuk aplikasi jaringan. User Deletion API dirancang dengan harapan bahwa klien yang memilih untuk mencoba kembali permintaan yang gagal melakukannya menggunakan backoff eksponensial. Selain "diperlukan", penggunaan backoff eksponensial akan meningkatkan efisiensi penggunaan bandwidth, mengurangi jumlah permintaan yang diperlukan untuk mendapatkan respons yang berhasil, dan memaksimalkan throughput permintaan dalam lingkungan serentak.

Berikut cara menerapkan backoff eksponensial:

  1. Buat permintaan ke API.
  2. Menerima respons error yang memiliki kode error yang dapat dicoba ulang.
  3. Tunggu 1 dtk + random_number_milliseconds detik.
  4. Coba lagi permintaan.
  5. Menerima respons error yang memiliki kode error yang dapat dicoba ulang.
  6. Tunggu 2 detik + random_number_milliseconds detik.
  7. Coba lagi permintaan.
  8. Menerima respons error yang memiliki kode error yang dapat dicoba ulang.
  9. Tunggu 4 detik + random_number_milliseconds detik.
  10. Coba lagi permintaan.
  11. Menerima respons error yang memiliki kode error yang dapat dicoba ulang.
  12. Tunggu 8 dtk + random_number_milliseconds detik.
  13. Coba lagi permintaan.
  14. Menerima respons error yang memiliki kode error yang dapat dicoba ulang.
  15. Tunggu 16 detik + random_number_milliseconds detik.
  16. Coba lagi permintaan.
  17. Jika Anda masih mendapatkan error, hentikan dan catat error tersebut.

Pada alur sebelumnya, random_number_milliseconds adalah angka acak milidetik yang kurang dari atau sama dengan 1.000. Hal ini diperlukan untuk menghindari error kunci tertentu dalam beberapa implementasi serentak. random_number_milliseconds harus ditentukan ulang setelah setiap periode tunggu.

Algoritma disetel untuk dihentikan jika n adalah 5. Batas ini hanya diterapkan untuk menghentikan klien agar tidak terus mencoba tanpa batas, dan mengakibatkan penundaan total sekitar 32 detik sebelum permintaan dianggap "error yang tidak dapat dipulihkan".

Kode Python berikut adalah implementasi alur sebelumnya untuk memulihkan dari error yang terjadi dalam metode yang disebut makeRequest.

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