我對 REST API 是無狀態的術語感到有些困惑。例如,如果我們有一個 To-Do 串列 API,并且其中一個端點用于更新或洗掉條目,那么每個請求都不會孤立地發生。
如果我在其他人查詢總條目之前創建了一個條目,那么他們的回應將取決于我的回應。
但是,PUT 被視為 REST API 的動詞。有人可以幫我解決我的困惑嗎?
uj5u.com熱心網友回復:
無狀態意味著您將客戶端狀態存盤在客戶端上并隨每個請求一起發送,而不是將其存盤在服務器上。后者是經典的服務器端會話,其中您有一個帶有會話 id 的會話 cookie,并且服務器將會話資料存盤在資料庫或檔案系統中。這對于 Facebook 大小的應用程式來說不能很好地擴展,這就是為什么他們寧愿在每個請求中發送會話資料。如果您使用存盤在服務器上的私鑰對會話資料進行簽名,則可以確保客戶端不會修改會話資料。因此每個請求都有簽名驗證,但它仍然比在資料庫中維護超過 100 萬用戶的會話資料并在全球范圍內與多臺服務器同步以解決單點故障問題的成本更低。
至于與并發呼叫相關的部分問題,可以通過資源版本控制來解決。您可以發送資源的實際ETag并將if-match標頭與您的 PUT 請求一起使用,以便服務器能夠確定您的請求基于哪個版本。如果有更新的版本,則 ETag 將不匹配,服務器將拒絕該請求。可以有其他方法來解決并發問題,它始終取決于您的應用程式如何處理它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/532148.html
標籤:休息
