簡體   English   中英

在 Django REST 應用程序中使用 ETag 進行樂觀鎖定

[英]Using ETag for optimistic locking in a Django REST application

我正在嘗試為 Django 選擇一個 REST 框架,它允許我輕松地使用 ETags 進行樂觀鎖定。 我計划檢查 Django-pistons 和 Django Rest Framework 庫,但我對任何非 GPL 解決方案持開放態度(公司許可要求阻止我使用它們)。

我的應用程序正在以 JSON/YAML 形式從 SQLAlchemy 模型(不是 Django 模型)出售數據,並且模 ETag 問題在 Django Rest Framework 中工作得很好。 但是,我看不到在我的視圖上應用 ETag 標頭的簡單方法。

對於我的觀點,我想這樣做:

  1. 給定一個響應,輕松地將 ETag 添加到我成功發送的響應標頭中。 這必須由我計算,因為它將取決於模型; 散列響應值或類似的東西是不夠的。

  2. 在 POST/PUT 上,確保我收到的 ETag 與我發出的 ETag 匹配,否則拒絕請求。

第 1 步給我帶來了一些麻煩; 我不確定哪個 REST 框架會讓這變得最簡單,我也不確定完成它的最佳方法是什么。

框架的選擇並不重要。 在任何情況下,您都必須在緩存(memcache 或 redis)中維護一個表示資源狀態的 etag。 您可以使用分代緩存算法 ( https://signalvnoise.com/posts/3113-how-key-based-cache-expiration-works )。 然后,您可以輕松編寫一個 mixin,提取每個資源的 etag 並將其發送。 根據我的個人經驗,Django Rest Framework 非常適合它,因為它具有高度的靈活性和編寫良好的代碼。

Django 通過裝飾器(@etag、@last_modified、@condition)或中間件支持 ETags - 您可以查看文檔 如果你想在 Django Rest Framework 中使用這些裝飾器,你可以使用django-rest-framework-condition

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM