2011-06-27 58 views
0

比方說,我有一個對象,Widget,由一個Id和一個名稱組成。假設我公開了一個端點/小部件,客戶端可以在其中發佈新的Widget對象。如果我想讓Id字段總是由服務器設置,不能由客戶端修改,但對客戶端仍然可見,我如何聲明Id字段不可修改?如果這有什麼不同,我正在使用RESTeasy。限制對RESTful API中特定字段的更新

回答

0

我可以想到幾個選項。

首先,你確定你需要公開ID作爲表示的一部分嗎?或者是否足以響應新發布資源的位置?

您的客戶端的帖子:

<Resource><Name>New Resource</Name></Resource> 

而你回答:

HTTP/1.1 201 Created 
... 
Location: /resources/{new_resource_id} 

除此之外,我認爲這是確定有一些簡單的,易於理解的與客戶約定。我認爲大多數開發人員都知道ID很可能是由系統生成的(特別是,因爲您正在執行POST而不是PUT)。對於不太明顯的情況下,如果你有任意的只讀域(或其他驗證或顯示信息),我認爲這可能是有意義的提供一個鏈接到元數據:

<NewPersonForm> 
    <atom:link href="/people/new/metadata" rel="/rels/metadata" /> 
    <Name /> 
    <Department>HR</Department> 
</NewPersonForm> 

元數據的樣子達你,但這些方針的東西可能會爲你工作:

<Metadata> 
    <Element> 
     <Name>Department</Name> 
     <IsReadOnly>True</IsReadOnly> 
    </Element> 
</Metadata> 

這是很好的,格式中立的(它可以很好地用於XML和JSON)的方式將信息提供給客戶,如果他們真的想,他們可以對它進行編程,以便即時創建表單(我用它來提供驗證信息,語言特定標籤和數據類型信息)。

我希望這會有所幫助。

約翰

0

你可以在服務器上編寫代碼,它可以隨意做任何事情。這包括根據需要添加或更改數據。檢查AtomPub protocol section 9.2明確規定:

由於服務器可以自由地改變 發佈的項目,例如,通過改變 原子的含量:id元素, 返回條目可以是有用 客戶端,使其能夠將 條目的客戶端和服務器視圖相關聯 。