Calendar API menampilkan dua tingkat informasi error:
- Kode dan pesan error HTTP di header
- Objek JSON dalam isi respons dengan detail tambahan yang dapat membantu Anda menentukan cara menangani error.
Bagian lainnya dari halaman ini menyediakan referensi error Kalender, dengan beberapa panduan tentang cara menangani error di aplikasi Anda.
Mengimplementasikan backoff eksponensial
Dokumentasi Cloud API memiliki penjelasan yang baik tentang backoff eksponensial dan cara menggunakannya dengan Google API.
Error & tindakan yang disarankan
Bagian ini memberikan representasi JSON lengkap dari setiap error yang tercantum dan tindakan yang disarankan yang dapat Anda lakukan untuk menanganinya.
400: Bad Request
Kesalahan pengguna. Hal ini dapat berarti bahwa kolom atau parameter yang wajib diisi belum diberikan, nilai yang diberikan tidak valid, atau kombinasi kolom yang disediakan tidak valid.
{
"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."
}
}
Tindakan yang disarankan: Karena ini adalah error permanen, jangan coba lagi. Baca pesan error dan ubah permintaan Anda.
401: Kredensial Tidak Valid
Header otorisasi tidak valid. Token akses yang Anda gunakan sudah tidak berlaku atau tidak valid.
{
"error": {
"errors": [
{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization",
}
],
"code": 401,
"message": "Invalid Credentials"
}
}
Tindakan yang disarankan:
- Dapatkan token akses baru menggunakan token refresh yang memiliki masa aktif lama.
- Jika gagal, arahkan pengguna melalui alur OAuth, seperti yang dijelaskan dalam Memberi otorisasi permintaan dengan OAuth 2.0.
- Jika Anda melihat opsi ini untuk akun layanan, pastikan Anda telah berhasil menyelesaikan semua langkah di halaman akun layanan.
403: Batas Kapasitas Pengguna Terlampaui
Salah satu batas dari Konsol Play telah tercapai.
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "userRateLimitExceeded",
"message": "User Rate Limit Exceeded"
}
],
"code": 403,
"message": "User Rate Limit Exceeded"
}
}
Tindakan yang disarankan:
- Pastikan aplikasi Anda mengikuti praktik terbaik dari mengelola kuota.
- Menambah kuota per pengguna dalam proyek Konsol Pengembang.
- Jika satu pengguna membuat banyak permintaan atas nama banyak pengguna
di akun Google Workspace, pertimbangkan
menggunakan akun layanan dengan delegasi seluruh domain
dan menyetel parameter
quotaUser
. - Gunakan backoff eksponensial.
403: Batas Kapasitas Terlampaui
Pengguna telah mencapai tingkat permintaan maksimum Google Calendar API per kalender atau per pengguna yang diautentikasi.
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "rateLimitExceeded",
"message": "Rate Limit Exceeded"
}
],
"code": 403,
"message": "Rate Limit Exceeded"
}
}
Tindakan yang disarankan: Error rateLimitExceeded
dapat menampilkan kode error 403 atau 429—saat ini kode error tersebut secara fungsional mirip dan harus ditanggapi dengan cara yang sama, menggunakan backoff eksponensial.
Selain itu, pastikan aplikasi Anda mengikuti praktik terbaik dari
mengelola kuota.
403: Batas penggunaan Kalender terlampaui
Pengguna mencapai salah satu batas Google Kalender yang diterapkan untuk melindungi pengguna dan infrastruktur Google dari perilaku penyalahgunaan.
{
"error": {
"errors": [
{
"domain": "usageLimits",
"message": "Calendar usage limits exceeded.",
"reason": "quotaExceeded"
}
],
"code": 403,
"message": "Calendar usage limits exceeded."
}
}
Tindakan yang disarankan:
- Baca informasi selengkapnya tentang batas penggunaan Kalender di bantuan Administrator Google Workspace.
403: Dilarang untuk orang yang bukan penyelenggara
Permintaan pembaruan acara mencoba menetapkan salah satu properti acara bersama
dalam salinan yang bukan milik penyelenggara. Properti bersama (misalnya, guestsCanInviteOthers
, guestsCanModify
, atau guestsCanSeeOtherGuests
) hanya dapat ditetapkan oleh penyelenggara.
{
"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."
}
}
Tindakan yang disarankan:
- Jika Anda menggunakan Events: insert, Events: import, atau Events: update, dan permintaan Anda tidak mencakup properti bersama apa pun, ini sama dengan mencoba menetapkannya ke nilai default-nya. Pertimbangkan untuk menggunakan Events: patch.
- Jika permintaan Anda memiliki properti bersama, pastikan Anda hanya mencoba mengubah properti ini jika memperbarui salinan penyelenggara.
404: Tidak Ditemukan
Resource yang ditentukan tidak ditemukan. Hal ini dapat terjadi dalam beberapa kasus. Berikut beberapa contohnya:
- saat resource yang diminta (dengan ID yang diberikan) tidak pernah ada
saat mengakses kalender yang tidak dapat diakses pengguna
{ "error": { "errors": [ { "domain": "global", "reason": "notFound", "message": "Not Found" } ], "code": 404, "message": "Not Found" } }
Tindakan yang disarankan: Gunakan backoff eksponensial.
409: ID yang diminta sudah ada
Instance dengan ID yang diberikan sudah ada dalam penyimpanan.
{
"error": {
"errors": [
{
"domain": "global",
"reason": "duplicate",
"message": "The requested identifier already exists."
}
],
"code": 409,
"message": "The requested identifier already exists."
}
}
Tindakan yang disarankan: Buat ID baru jika Anda ingin membuat instance baru. Jika tidak, gunakan panggilan metode update.
409: Conflict
Item yang dikelompokkan di dalam operasi
events.batch
tidak dapat dijalankan karena adanya konflik operasional dengan item batch
lain yang diminta.
{
"error": {
"errors": [
{
"domain": "global",
"reason": "conflict",
"message": "Conflict"
}
],
"code": 409,
"message": "Conflict"
}
}
Tindakan yang disarankan: Kecualikan semua item yang berhasil diselesaikan dan semua item yang dikelompokkan
yang pasti gagal, dan coba lagi item lainnya dalam events.batch
yang berbeda atau operasi peristiwa tunggal yang sesuai.
410: Tidak ada
Parameter syncToken
atau updatedMin
tidak lagi valid. Error ini juga dapat terjadi jika permintaan mencoba menghapus peristiwa yang telah dihapus.
{
"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."
}
}
atau
{
"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."
}
}
atau
{
"error": {
"errors": [
{
"domain": "global",
"reason": "deleted",
"message": "Resource has been deleted"
}
],
"code": 410,
"message": "Resource has been deleted"
}
}
Tindakan yang disarankan: Untuk parameter syncToken
atau updatedMin
, hapus total penyimpanan dan sinkronkan ulang. Untuk mengetahui detail selengkapnya, lihat
Menyinkronkan Resource secara Efisien.
Untuk peristiwa yang sudah dihapus, Anda tidak perlu melakukan tindakan lebih lanjut.
412: Prasyarat Gagal
Etag yang diberikan di header if-match tidak lagi sesuai dengan etag resource saat ini.
{
"error": {
"errors": [
{
"domain": "global",
"reason": "conditionNotMet",
"message": "Precondition Failed",
"locationType": "header",
"location": "If-Match",
}
],
"code": 412,
"message": "Precondition Failed"
}
}
Tindakan yang disarankan: Ambil ulang entitas dan terapkan kembali perubahan. Untuk mengetahui detail selengkapnya, lihat Mendapatkan versi resource tertentu.
429: Terlalu banyak permintaan
Error rateLimitExceeded
terjadi saat pengguna mengirim terlalu banyak permintaan dalam
jangka waktu tertentu.
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "rateLimitExceeded",
"message": "Rate Limit Exceeded"
}
],
"code": 429,
"message": "Rate Limit Exceeded"
}
}
Tindakan yang disarankan: Error rateLimitExceeded
dapat menampilkan kode error 403 atau 429—saat ini kode error tersebut secara fungsional mirip dan harus ditanggapi dengan cara yang sama, menggunakan backoff eksponensial.
Selain itu, pastikan aplikasi Anda mengikuti praktik terbaik dari
mengelola kuota.
500: Kesalahan Backend
Terjadi error tidak terduga saat memproses permintaan.
{
"error": {
"errors": [
{
"domain": "global",
"reason": "backendError",
"message": "Backend Error",
}
],
"code": 500,
"message": "Backend Error"
}
}
Tindakan yang disarankan: Gunakan backoff eksponensial.