Bối cảnh
Do tính phi trạng thái của kiểu kiến trúc REST liên quan đến việc mỗi yêu cầu đứng hoàn toàn một mình, máy chủ hàng đầu không bao giờ lưu trữ bất kỳ thông tin nào về máy khách.
Do đó, kiểm soát đồng thời bi quan không phù hợp bởi vì nó sẽ yêu cầu máy chủ lưu trữ máy khách nào có khóa trên tài nguyên. Kiểm soát đồng thời lạc quan sau đó được sử dụng, với sự trợ giúp của Etag
tiêu đề. (btw, như tôi đã hỏi ở đó /programming/30080634/concurrency-in-a-rest-api )
Vấn đề
Vấn đề chính với cơ chế kiểm soát đồng thời lạc quan là bạn cho phép mọi lúc, mọi khách hàng, thực hiện bất kỳ hoạt động nào.
Và tôi muốn tránh điều đó mà không phá vỡ nguyên tắc không quốc tịch của REST. Tôi có nghĩa là tất cả các khách hàng không thể thực hiện bất kỳ hoạt động bất cứ lúc nào.
Câu hỏi
Trong tâm trí của tôi, nó có thể với một cơ chế kiểm soát tương tranh bán lạc quan , như thế:
- Khách hàng có thể yêu cầu mã thông báo
- Chỉ một mã thông báo có thể được tạo và có thời hạn hiệu lực hạn chế
- Để thực hiện các hoạt động trên các tài nguyên (như POST hoặc PUT ), khách hàng phải cung cấp mã thông báo này như một phần của phần thân (hoặc tiêu đề?) Của yêu cầu. Khách hàng không có mã thông báo không thể thực hiện các hoạt động này.
Nó rất giống với điều khiển đồng thời lạc quan, ngoại trừ việc chỉ có một khách hàng có thể thực hiện một số thao tác (một hoạt động có mã thông báo) ... ngược lại với "tất cả các khách hàng có thể thực hiện tất cả các hoạt động".
Cơ chế này có tương thích với phong cách kiến trúc REST không? Liệu nó có phá vỡ bất kỳ ràng buộc của nó? Tôi đã suy nghĩ để hỏi về SO, nhưng đây có vẻ là một câu hỏi cấp cao hơn, liên quan đến thiết kế phần mềm.
Etag
? Với Etag
bạn không bao giờ chắc chắn rằng các hoạt động của bạn sẽ được hoàn thành, bạn có thể có một tình huống mà bạn sẽ không bao giờ thực hiện bất kỳ hoạt động. Với một khóa, bạn chắc chắn ít nhất để thực hiện hoạt động của bạn. Vì vậy, có một khóa đơn giản chỉ là một trung gian giữa một môi trường nơi "xung đột cao" và "xung đột hiếm" có thể xảy ra.
Transaction
cách rõ ràng như một Tài nguyên.