2015-02-06 46 views
2

我在設計REST API時提出了這個問題。用java中其他對象更新對象的最佳方法在休息中

要更新資源,客戶端必須使用更新的字段提交整個資源。問題是並非所有的字段都是可編輯的。如果客戶端發送的資源中包含他不應更新的更新字段,該怎麼辦?我應該拋出某種異常還是忽略它們並更新所有可編輯的字段? 我想出了以下解決方案

class User { 

    private String firstName; //non-editable 
    private String lastName; //non-editable 
    private String occupation; //editable 
    private String address; //editable 

    //getters and setters 

}

public void updateUser(User original, User update) { 
    original.setAddress(update.getAddress()); 
    original.setOccupation(update.getOccupation()); 
} 

我在這裏看到的問題是,UpdateUser兩個方法是緊密結合的用戶類別。如果我添加或刪除可編輯/不可編輯的字段,我將不得不改變方法。是否有某種解決這類問題的最佳實踐或模式?

+0

將值設置爲null將被視爲對您的編輯?當他們從頭開始創建json時,很多人可能會更喜歡這樣做,而不是搞清楚其他字段當前是什麼。 – 2015-02-06 18:25:02

+1

另外,我認爲編程stackexchange可能比stackoverflow更讚賞這個問題。 – 2015-02-06 18:26:00

回答

2

用戶的靜態方法會正確封裝此功能。這樣,您可以將所有用戶特定的代碼放在一起。

class User { 

     private String firstName; //non-editable 
     private String lastName; //non-editable 
     private String occupation; //editable 
     private String address; //editable 

     static public void updateUser(User original, User update) { 
     original.setAddress(update.getAddress()); 
     original.setOccupation(update.getOccupation()); 
     } 
    } 

另外,如果你那麼在乎的firstName /創建後名字不被改變,我會確保他們不包括制定者在所有。

1

作爲API的用戶,我希望知道何時編輯不可編輯的值,因爲這可能意味着我在代碼中存在錯誤或者誤解了API的功能。無論是哪種情況,我都希望儘可能在流程中儘早找到答案,所以我希望通過響應中的錯誤代碼來看到異常,而不是看起來對我成功,但不會實際上做我認爲的事情。

這就是說,這取決於具體的用例。沒有關於如何使用API​​的更多細節很難說。只更新可編輯字段並在API文檔中明確說明可能更有意義。

由於coderkevin已經調出,在User類上使用靜態方法將是放置實際進行更新的代碼的適當位置。

+1

這是一個很好的觀點,在實踐中,如果有人修改了不應該有的值,我會添加異常或返回驗證錯誤。 – coderkevin 2015-02-06 19:09:25

相關問題