Error dan Penanganan Error

Jika permintaan Firestore dalam mode Datastore berhasil, API akan menampilkan kode status 200 OK HTTP 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 yang lebih spesifik tentang error yang menyebabkan kegagalan.

Bagian selanjutnya dari halaman ini menjelaskan struktur error, menyebutkan kode error tertentu, dan merekomendasikan cara menanganinya.

Berikut ini 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 dalam 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). Pada error JSON, kode ini muncul di kolom status. Di error application/x-protobuf, letaknya 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 entity Anda untuk mengurangi pertentangan.

Untuk permintaan yang merupakan bagian dari commit transactional:
Coba kembali seluruh transaksi atau susun entity Anda untuk mengurangi pertentangan.
ALREADY_EXISTS Menunjukkan bahwa permintaan tersebut 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 prakondisi 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 mana 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 memiliki 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.