Jika terjadi batas waktu permintaan atau kesalahan server internal saat Anda memanggil operasi AnalyticDB for PostgreSQL API, klien mungkin akan mencoba untuk mengirim ulang permintaan tersebut. Dalam kasus ini, Anda dapat menentukan parameter ClientToken dalam permintaan untuk mencegah klien mengirim ulang permintaan secara berulang kali.
Apa itu idempotensi
Idempotensi adalah properti dari beberapa operasi dan sumber daya dalam matematika atau ilmu komputer. Idempotensi memungkinkan Anda mendapatkan hasil dari permintaan awal setelah melakukan operasi atau menerapkan sumber daya beberapa kali. Idempotensi sangat penting dalam desain sistem terdistribusi.
Pastikan idempotensi
Dalam kebanyakan kasus, klien mengirim permintaan ulang ketika kode status HTTP yang dikembalikan adalah 500 Internal Server Error atau 503 Service Unavailable, atau ketika tidak ada hasil yang dikembalikan. Saat menggunakan API AnalyticDB for PostgreSQL, klien menghasilkan nilai parameter yang terdiri dari hingga 64 karakter ASCII, dan Anda dapat memberikan nilai tersebut kepada ClientToken untuk memastikan idempotensi dari permintaan yang diulang.
Detail ClientToken
Berikut ini menjelaskan detail tentang ClientToken:
- Nilai ClientToken adalah string unik dan peka huruf besar/kecil yang dihasilkan oleh klien dan dapat berisi hingga 64 karakter ASCII. Contoh:
ClientToken=123e4567-e89b-12d3-a456-426655440000. - Jika Anda menentukan permintaan dengan nilai ClientToken yang sedang digunakan tetapi dengan parameter permintaan yang berbeda, AnalyticDB for PostgreSQL mengembalikan kode kesalahan
IdempotentParameterMismatch.Catatan Jika Anda memanggil operasi lagi, Anda harus mengubah nilai parameter SignatureNonce, Timestamp, dan Signature. Hal ini karena AnalyticDB for PostgreSQL menggunakan parameter SignatureNonce untuk mencegah serangan pemutaran ulang dan menggunakan parameter Timestamp untuk mengidentifikasi cap waktu setiap permintaan. Oleh karena itu, permintaan ulang memerlukan nilai yang berbeda untuk parameter SignatureNonce dan Timestamp. Dalam hal ini, nilai parameter Signature berubah. - Jika Anda menentukan parameter ClientToken dan permintaan gagal, permintaan dikirim ulang berdasarkan kode status HTTP dan pesan kesalahan berikut:
- Jika kode status HTTP 200 dikembalikan, percobaan ulang menghasilkan hasil yang sama seperti permintaan terakhir dan status server Anda tidak terpengaruh.
- Jika kode status HTTP 4xx dikembalikan, percobaan ulang gagal. Jika kode status dikembalikan dengan pesan kesalahan
coba lagi nanti, server sedang sibuk. Coba lagi nanti. Anda harus memecahkan masalah berdasarkan pesan kesalahan yang dikembalikan sebelum mengirim ulang permintaan.