2 回答

TA貢獻1798條經驗 獲得超3個贊
有沒有一種更簡潔的方法來處理包括一對多關系、多對多關系等的部分更新?
很難說——這取決于工作的哪一部分給你帶來了麻煩。
PATCH
,并且類似地PUT
,表達文檔編輯語義——在這兩種情況下,我們都要求服務器使其對某些資源的表示與客戶端的表示相匹配。
我GET /foo
和你依次發給我一個 1GB 的 json 文檔。我將該文檔加載到我的 json 編輯器中,并修復一兩個拼寫錯誤。因為變化很小,我可能想向您發送一個 PATCH 請求,而不是發回 1GB 的 json。這意味著我將在您和我理解的某種媒體類型中創建我的編輯的表示,并將該表示發送給您。
application/json-patch+json可能是一個很好的起點。
使用標準的好處在于,很多工作已經為您完成。但是您可以設計自己的補丁文檔模式,如果您愿意的話,并發布它,任何理解您的模式的客戶都可以與您進行互操作。
請注意,這一切都發生在“通過網絡傳輸文檔”的領域。這里沒有任何事情暗示客戶知道存在對象模型、關系數據庫表或任何類似的實現細節。這純粹是服務器要解決的問題。
當然,現在問題的第二部分是:我在這,一臺帶有補丁文檔的服務器和我的關系數據庫中可能需要更新的 110 個表。這是怎么發生的?正如約翰指出的那樣,這是必須實施的工作。在 Java/Spring/Hibernate 類型的世界中,一個可能的答案是您可以通過 ORM 加載當前服務器端狀態,使用補丁引導對本地內存數據結構的編輯,然后讓您的 ORM 找出什么需要運行語句。

TA貢獻1829條經驗 獲得超9個贊
我以前用兩種方式解決過這個問題。
就像你提到的。擁有處理邏輯和路由到適當的 crud 存儲庫方法的委托
使用 PATCH HTTP 方法。請注意,這只是語義上的。實際邏輯仍然需要像任何其他 HTTP 方法一樣由您完成。
此處示例:https ://github.com/jersey/jersey/tree/master/examples/http-patch
添加回答
舉報