2016-03-02 33 views
1

我正在尋找一種方式如何應對以下問題:REST API - 單個資源的更新改變多個其他

想象一下,你修改資源和隨後導致其他資源的更新。

E.g.你發出一個PUT,例如/api/orders/1234,它通過定義改變給定用戶的所有其他訂單的狀態。可能有UI客戶端顯示Orders表,他們應該知道表中不僅有單個項目已更新,而且最終也是其他項目。

現在,有沒有什麼標準的方式告訴客戶這種情況?

到目前爲止,我只能想到發送返回205 Reset Content HTTP狀態代碼來通知客戶端他應該刷新狀態,因爲不只是一件事情發生了變化。

回答

1

有多種解決方案。

  1. 您可以將特定資源定義爲不可緩存的,因此客戶端根本不緩存它們。 (no-store
  2. 您可以嘗試給出max-age爲0,因此客戶端必須始終重新驗證這些資源。在這種情況下,您可能必須實現ETag和條件GET s,但在服務器上將比選項1更容易。
  3. 某些方法如WebSockets

如果你真的想「通知」改變的潛在多個客戶端,那麼它聽起來像你需要選擇3

然而,正確配置緩存是不夠好正常。例如,您可以將尚未執行的訂單標記爲未緩存(max-age = 0),但一旦執行,您可能會將其標記爲無限期緩存,因爲它無法再更改。