簡體   English   中英

部分字段更新REST API

[英]Partial fields update REST API

有這個MongoBean:SuperBean

class SuperBean extends MongoBaseBean{
     private String id;
     private String title;
     private String parent;

     //And getters, setters   
}

需要編寫一個更新API,該API能夠執行部分屬性更新。 在網絡上以及從我的同齡人那里聽到的常見方法是檢查Null請求中的字段,如果不為null,則進行更新。 但是,如果更新請求將值更新為Null,該怎么辦?

經過少量討論,我們提出了三種方法:

  • 為Bean中的字段設置默認值。 因此,如果它在請求中沒有$而不是非null父字段,則將考慮對其進行更新。

     class SuperBean extends MongoBaseBean{ private String id; private String title; private String parent = "$"; //And getters, setters } 
  • 讓更新API實施接受地圖。 將提取實際的bean,並且將更新請求映射中存在的所有字段。

     @Post public SuperBean updatePartial(Map<String,Object> dataObject) {} 
  • 讓更新API接受包含2個映射的DTO。 一個包含舊值,另一個包含新值。 在僅當數據庫包含在oldDataObj中發送的值的情況下才必須進行更新的情況下,這可能是有利的。 但這增加了有效載荷的大小。

      class SuperBeanUpdateDTO { private Map<String, Object> oldDataObj; private Map<String, Object> newDataObject; //getters, setters } @Post public SuperBean updatePartial(SuperBeanUpdateDTO updateDTO) {} 

選擇這些方法之一應考慮哪些因素? 有沒有更好的方法來解決此問題?

在我的項目中,我們通常選擇與第二種方式相似的方式。 但不完全相同。

例如,在客戶端,您有一個頁面或一個視圖來修改您的個人資料信息,包括namebirthdaygender ,盡管您只是修改了name值,但是當您單擊save按鈕時,它仍然會將數據發送到服務器包括“ birthday和“帶有name gender字段,但只需保持其舊值即可。 服務器API將直接更新數據庫中的這三個值,而不檢查其值是否更改。

如果您有另一個頁面或視圖來修改配置文件的其他部分(例如密碼),則需要在客戶端中添加新方法,在服務器中添加新API。 API URL PATCH /reset_password ,並且發送的數據應包含old_passwordnew_password字段。

PS:
1.我們使用PUTPATCH更新資源,而不是POSTPOST用於創建新資源。 2.當您更新資源時,在上面的示例中,API喜歡PATCH /profiles/:id (其他人的個人資料)或PATCH /profile (您自己的個人資料),因此發送的數據不再需要id字段,它包含在您的API URL。

暫無
暫無

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

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