Konteks
Karena kewarganegaraan gaya arsitektur REST yang melibatkan setiap permintaan berdiri sendiri, menyebabkan server tidak pernah menyimpan informasi tentang klien.
Dengan demikian, kontrol konkurensi pesimis tidak cocok karena akan mengharuskan server menyimpan klien mana yang mendapatkan kunci pada sumber daya. Kontrol konkurensi optimis kemudian digunakan, dengan bantuan Etag
tajuk. (btw, seperti yang saya tanyakan di sana /programming/30080634/concurrency-in-a-rest-api )
Masalah
Masalah utama dengan mekanisme kontrol konkurensi optimis adalah bahwa Anda mengizinkan sepanjang waktu, semua klien, untuk melakukan operasi apa pun.
Dan saya ingin menghindari itu tanpa melanggar prinsip statelessness REST. Maksud saya, semua klien tidak dapat melakukan operasi apa pun kapan saja.
Pertanyaan
Dalam pikiran saya, itu mungkin dengan mekanisme kontrol konkurensi semi-optimis , seperti itu:
- Klien dapat meminta token
- Hanya satu token yang dapat dibuat dan memiliki masa berlaku terbatas
- Untuk melakukan operasi pada sumber daya (seperti POST atau PUT ), klien harus memberikan token ini sebagai bagian dari tubuh (atau header?) Dari permintaan. Klien yang tidak memiliki token tidak dapat melakukan operasi ini.
Ini sangat mirip dengan kontrol konkurensi optimis, kecuali bahwa hanya satu klien yang dapat melakukan beberapa operasi (yang mendapatkan token) ... di kebalikan dari "semua klien dapat melakukan semua operasi".
Apakah mekanisme ini kompatibel dengan gaya arsitektur REST? Apakah itu melanggar salah satu kendala? Saya berpikir untuk bertanya pada SO, tetapi ini tampaknya lebih merupakan pertanyaan tingkat tinggi, terkait dengan desain perangkat lunak.
Etag
? Dengan Etag
Anda tidak pernah yakin bahwa operasi Anda akan selesai, Anda dapat memiliki situasi di mana Anda tidak akan pernah melakukan operasi apa pun. Dengan kunci, Anda yakin setidaknya untuk melakukan operasi Anda. Jadi, memiliki kunci sederhana hanyalah perantara antara lingkungan di mana "konflik tinggi" dan "konflik langka" dapat terjadi.
Transaction
eksplisit sebagai Sumber Daya.