全部产品
Search
文档中心

Resource Orchestration Service:Pastikan idempotensi

更新时间:Jun 26, 2025

Jika permintaan habis waktu atau terjadi kesalahan internal di server saat Anda memanggil API Resource Orchestration Service (ROS), klien mungkin mencoba mengirimkan permintaan ulang. Dalam hal ini, Anda dapat menentukan parameter ClientToken dalam permintaan untuk mencegah pengiriman permintaan berulang oleh klien.

Apa itu idempotensi?

Idempotensi adalah properti dari beberapa operasi dan sumber daya dalam matematika atau ilmu komputer. Idempotensi memungkinkan Anda mendapatkan hasil yang sama dari permintaan awal meskipun operasi atau penerapan sumber daya dilakukan beberapa kali. Idempotensi sangat penting dalam desain sistem terdistribusi.

Pastikan idempotensi

Dalam kebanyakan kasus, klien mengirimkan permintaan ulang ketika kode status HTTP yang dikembalikan adalah 500 Internal Server Error atau 503 Service Unavailable, atau ketika tidak ada hasil yang diterima. Saat memanggil API ROS, Anda dapat menentukan parameter agar klien menghasilkan string unik hingga 64 karakter ASCII dan menetapkan string tersebut sebagai nilai parameter ClientToken untuk memastikan idempotensi permintaan ulang.

ClientToken

Berikut adalah penjelasan tentang parameter permintaan ClientToken:

  • Nilai parameter ClientToken adalah string unik yang peka terhadap huruf besar/kecil, dihasilkan oleh klien, dan dapat mencakup hingga 64 karakter ASCII. Contoh: ClientToken=123e4567-e89b-12d3-a456-42665544****.
  • Jika permintaan ulang berisi nilai ClientToken yang sama dengan permintaan awal tetapi memiliki nilai berbeda untuk parameter lainnya, ROS akan mengembalikan kode kesalahan InvalidIdempotenceParameter.
    Catatan SignatureNonceTimestampNilai parameter SignatureNonce, Timestamp, dan Signature dalam permintaan ulang harus diubah. Dalam API ROS, parameter SignatureNonce mencegah serangan pemutaran ulang, sedangkan parameter Timestamp mencatat waktu setiap permintaan. Oleh karena itu, nilai parameter SignatureNonce dan Timestamp dalam setiap permintaan ulang harus berbeda dari nilai dalam permintaan awal. Secara default, nilai parameter Signature berubah saat Anda mengubah nilai parameter dan .
  • Setelah menentukan parameter ClientToken dalam permintaan ulang, hasil berikut mungkin diterima:
    • Kode status HTTP 200 OK yang menunjukkan panggilan berhasil. Dalam hal ini, klien dapat memperoleh hasil yang sama dengan permintaan awal, dan server tidak terpengaruh.
    • Kode status HTTP yang menunjukkan panggilan gagal, seperti 400 Bad Request. Dalam hal ini, permintaan ulang gagal jika pesan kesalahan seperti coba lagi nanti muncul. Anda dapat mengidentifikasi penyebab kesalahan berdasarkan pesan kesalahan dan mengirimkan permintaan ulang lainnya.

Contoh permintaan

Dalam contoh ini, operasi CreateStack dipanggil untuk membuat tumpukan dalam permintaan ulang. Jika Anda menetapkan parameter permintaan ClientToken ke nilai yang sama dengan ClientToken dari permintaan awal dan tidak mengubah nilai parameter lainnya, nilai StackId yang dikembalikan oleh server akan identik dengan nilai pada permintaan awal. Namun, jika Anda menetapkan parameter ClientToken ke nilai berbeda dari permintaan awal, server mungkin mengembalikan nilai StackId yang berbeda dan membuat beberapa tumpukan.

Contoh Permintaan

http(s)://ros.aliyuncs.com/?Action=CreateStack
&RegionId=cn-hangzhou
&StackName=MyStack
&TemplateBody={"ROSTemplateFormatVersion": "2015-09-01"}
&ClientToken=123e4567-e89b-12d3-a456-42665544****
&<Common request parameters>

Contoh Respons

{
    "StackId": "4a6c9851-3b0f-4f5f-b4ca-a14bf691****",
    "RequestId": "B288A0BE-D927-4888-B0F7-B35EF84B6E6F"    
}