Error dan Penanganan Error

Jika permintaan Firestore dalam mode Datastore berhasil, API akan menampilkan kode status HTTP 200 OK beserta data yang diminta dalam isi respons.

Jika permintaan gagal, Datastore API akan menampilkan kode status HTTP 4xx atau 5xx yang secara umum mengidentifikasi kegagalan serta respons yang memberikan informasi lebih spesifik tentang error yang menyebabkan kegagalan.

Bagian lain dari halaman ini menjelaskan struktur error, menghitung kode error tertentu, dan merekomendasikan cara menanganinya.

Berikut adalah struktur respons error untuk permintaan JSON:

{
  "error": {
    "code": "integer",
    "message": "string",
    "status": "string"
  }
}

Objek respons berisi satu kolom error yang nilainya berisi elemen berikut:

Elemen Deskripsi
code Kode status HTTP yang secara umum mengidentifikasi kegagalan permintaan.
message Informasi spesifik tentang kegagalan permintaan.
status Kode error kanonis (google.rpc.Code) untuk Google API. Kode yang mungkin ditampilkan oleh Datastore API tercantum di Kode Error.

Berikut adalah contoh respons error untuk permintaan JSON:

{
  "error": {
    "code": 400,
    "message": "Key path is incomplete: [Person: null]",
    "status": "INVALID_ARGUMENT"
  }
}

Jika permintaan yang dibuat dengan jenis konten application/x-protobuf menghasilkan error, permintaan tersebut akan menampilkan pesan google.rpc.Status serial sebagai payload.

Kode Error

Cara yang direkomendasikan untuk mengklasifikasikan error adalah memeriksa nilai kode error kanonis (google.rpc.Code). Dalam error JSON, kode ini muncul di kolom status. Pada error application/x-protobuf, nilai ini ada di kolom code.

Kode Error Kanonis Deskripsi Tindakan yang Disarankan
ABORTED Menunjukkan bahwa permintaan bertentangan dengan permintaan lain. Untuk commit non-transaksional:
Coba lagi permintaan atau susun ulang entitas Anda untuk mengurangi pertentangan.

Untuk permintaan yang merupakan bagian dari commit transaksional:
Coba lagi seluruh transaksi atau susun ulang entitas Anda untuk mengurangi pertentangan.
ALREADY_EXISTS Menunjukkan bahwa permintaan mencoba memasukkan entitas yang sudah ada. Jangan mencoba lagi tanpa memperbaiki masalah.
DEADLINE_EXCEEDED Batas waktu terlampaui di server. Coba lagi menggunakan backoff eksponensial.
FAILED_PRECONDITION Menunjukkan bahwa prasyarat untuk permintaan tidak terpenuhi. Kolom pesan dalam respons error memberikan informasi tentang prasyarat yang gagal. Salah satu kemungkinan penyebabnya adalah menjalankan kueri yang memerlukan indeks yang belum ditentukan. Jangan mencoba lagi tanpa memperbaiki masalah.
INTERNAL Server menampilkan error. Jangan mencoba lagi permintaan ini lebih dari sekali.
INVALID_ARGUMENT Menunjukkan bahwa parameter permintaan memiliki nilai yang tidak valid. Kolom pesan dalam respons error memberikan informasi tentang nilai yang tidak valid. Jangan mencoba lagi tanpa memperbaiki masalah.
NOT_FOUND Menunjukkan bahwa permintaan tersebut mencoba memperbarui entity yang tidak ada. Jangan mencoba lagi tanpa memperbaiki masalah.
PERMISSION_DENIED Menunjukkan bahwa pengguna tidak diberi otorisasi untuk membuat permintaan. Jangan mencoba lagi tanpa memperbaiki masalah.
RESOURCE_EXHAUSTED Menunjukkan bahwa project melampaui kuota atau kapasitas region/multi-region. Verifikasi bahwa Anda tidak melebihi kuota project. Jika Anda melebihi kuota project, jangan mencoba lagi tanpa memperbaiki masalah.

Jika tidak, coba lagi dengan backoff eksponensial.
UNAUTHENTICATED Menunjukkan bahwa permintaan tidak memiliki kredensial autentikasi yang valid. Jangan mencoba lagi tanpa memperbaiki masalah.
UNAVAILABLE Server menampilkan error. Coba lagi menggunakan backoff eksponensial.