Tôi đang triển khai dịch vụ web RESTful truy cập cơ sở dữ liệu. Các thực thể trong cơ sở dữ liệu được phiên bản để phát hiện nhiều bản cập nhật. Ví dụ: nếu giá trị hiện tại là {"name":"Bill", "comment":"tinker", "version":3}
, nếu một người dùng PUTs {"name":"Bill", "comment":"tailor", "version":3}
, yêu cầu sẽ thành công (200 OK) và giá trị mới sẽ là {"name":"Bill", "comment":"tailor", "version":4}
. Nếu người dùng thứ hai PUTs {"name":"Bill", "comment":"sailor", "version":3"}
yêu cầu đó sẽ không thành công (409 Xung đột) vì số phiên bản không khớp.Trạng thái HTTP 412 (Điều kiện tiên quyết không thành công) và phiên bản cơ sở dữ liệu
Hiện có các giao diện không có sẵn, do đó, không thể thay đổi thiết kế cơ sở dữ liệu. Giao diện RESTful gọi một giao diện hiện có xử lý các chi tiết kiểm tra phiên bản.
Quy tắc chung trong dịch vụ web RESTful là thực hiện theo các chi tiết của HTTP bất cứ khi nào có thể. Sẽ tốt hơn trong trường hợp này để sử dụng tiêu đề có điều kiện trong yêu cầu và trả về 412 Điều kiện tiên quyết Không thành công nếu phiên bản không khớp? Tiêu đề thích hợp dường như là If-Match. Tiêu đề này có một ETag (Thẻ thực thể) có thể là một băm đại diện cho trạng thái hiện tại của tài nguyên.
Nếu tôi đã làm điều này, ETags sẽ vì mục đích xuất hiện, bởi vì phiên bản vẫn sẽ là điều thực sự tôi đang thử nghiệm.
Có lý do nào tôi nên làm điều này, không phải là "làm cho nó yên tĩnh hơn", bất kể điều đó nghĩa là gì?
bạn có bất kỳ đầu mối nào về vấn đề của mình không: http://stackoverflow.com/questions/19009312/how-to-detect-412-precondition-failed-errors-in-android-webview-url –
"* Phiên bản cờ không phải là băm của tài nguyên hiện tại * "- nó có tác dụng nếu bạn muốn giảm thiểu nguy cơ người dùng đoán phiên bản mong đợi là gì và bỏ qua kiểm tra đồng thời. – James
Heh :-) Tôi không thực sự nói rằng {{ETag: "3"}} là một ý tưởng tốt ... Làm cho nó mờ đục nói chung là một ý tưởng tốt, mặc dù nó làm giảm khả năng hiển thị. Xem xét {{ETag: "3: eccbc8"}} - trong đó "eccbc8 là 6 ký tự đầu tiên của md5sum của ký tự" 3 ".Điều này buộc khách hàng sử dụng thẻ thực thể theo cách họ dự định; nhưng giữ khả năng hiển thị ("3" là ở đó để con người có thể giải thích điều này như là "phiên bản 3"). Chúng tôi vẫn không băm nội dung thực sự. – mogsie