bağlam
REST mimari stilinin vatansızlığı nedeniyle, her bir talebin tamamen tek başına durması, sunucunun müşteri hakkında hiçbir zaman bilgi depolamamasına neden olur.
Bu nedenle, kötümser eşzamanlılık kontrolü uygun değildir, çünkü istemcinin bir kaynak üzerindeki kilidi alması gereken sunucu deposunu gerektirir. Daha sonra Etag
başlık yardımıyla iyimser eşzamanlılık kontrolü kullanılır . (btw, orada sorduğum gibi /programming/30080634/concurrency-in-a-rest-api )
Sorun
İyimser bir eşzamanlılık kontrol mekanizmasıyla ilgili temel sorun, her zaman, tüm istemcilerin herhangi bir işlemi gerçekleştirmesine izin vermenizdir.
Ve bundan kaçınmak istiyorum REST vatansızlık ilkesini bozmadan. Yani tüm istemciler hiçbir zaman herhangi bir işlem yapamaz.
Soru
Zihnimde, yarı iyimser bir eşzamanlılık kontrol mekanizması ile bu mümkün olabilir:
- Müşteriler bir jeton isteyebilir
- Yalnızca bir jeton oluşturulabilir ve sınırlı bir geçerlilik süresi vardır
- Kaynaklar ( POST veya PUT gibi) üzerinde işlem yapmak için , istemcinin bu belirteci isteğin gövdesinin (veya üstbilgisi?) Bir parçası olarak vermesi gerekir. Jetonu olmayan istemci bu işlemleri yapamaz.
İyimser eşzamanlılık kontrolüne çok benzer, tek fark sadece bir müşterinin bazı işlemleri yapabilmesi (jetonu alan) ... "tüm istemciler tüm işlemleri yapabilir" in tam tersidir.
Bu mekanizma bir REST mimari stiliyle uyumlu mu? Herhangi bir kısıtlamasını bozuyor mu? SO'ya sormayı düşünüyordum, ancak bu daha çok yazılım tasarımı ile ilgili üst düzey bir soru gibi görünüyor.
Etag
? İle Etag
size operasyonları sona ereceğini olmadığına emindir, size herhangi işlemleri gerçekleştirmek asla asla bir durum olabilir. Bir kilit ile en azından işleminizi yapacağınızdan emin olabilirsiniz. Yani basit bir kilide sahip olmak, "yüksek çatışmaların" ve "nadir çatışmaların" meydana gelebileceği bir ortam arasında sadece bir ortamdır.
Transaction
Açıkça bir Kaynak olarak modellemelisiniz .