2010-01-14 50 views
4

如果我使用100個字段發佈新資源,並且服務器添加了自己的3個字段(如創建日期,狀態等),是否只返回僅包含3個字段的資源的小型表示201 CREATED響應正文中的新字段?在POST響應中返回表示的子集是否違反了REST?

然後,客戶端可以將這3個新字段添加到其本地表示。我已經看到過,應該總是發送完整的表示,但它似乎浪費帶寬返回所有103.

+0

在REST中是不是有明確的文檔單位?如果您的文件單位可以明確跟蹤,那麼我看不出問題。 – jldupont 2010-01-14 17:03:16

回答

4

201響應實體(響應本身)不需要或被任何http客戶端認爲是剛剛創建的資源。

這是描述結果的表示。

如果你希望人們訪問剛剛創建的資源,他們可以通過發出與一個201

回來Location頭的URI請求這樣做如果您在返回實體主體你的201,它不被HTTP認爲是你剛剛創建的資源,所以你可以返回任何你想要的。

重要的是您返回實體的媒體類型。如果客戶知道該實體是實體的小型實體或完整版本,他們就知道該如何處理它。如果您希望clietn「知道」到201的返回媒體類型是最小化版本,那麼您就強制性地耦合到您自己的協議,這違反了ReST原則。

+0

好吧,所以你說我應該定義我自己的媒體類型,比如application/vnd.mydomain.myapp.customer + json,並且在201主體中返回的表示可以是隻有3個新字段的子集? – 2010-01-18 16:27:07

+0

絕對。如果您記錄您的媒體類型格式以供客戶使用,他們將知道如何處理內容以及響應。這個想法是,你希望能夠輕鬆地分支出你的代碼,這樣客戶端就能知道如何處理{customer-changes}類型,不管它得到什麼響應,並且最重要的是,當它是201時,位置:將讓它檢索最新版本。 – SerialSeb 2010-01-19 15:25:23

+0

也就是說,要知道客戶端要知道資源的當前狀態是什麼,您需要重新檢索它(至少有一個HEAD),因爲您將無法扣除新的ETag或緩存它隨附的標頭。最好使用響應來向用戶顯示已更改的內容,並在用戶想要進行新更改時重新檢索資源。 – SerialSeb 2010-01-19 15:26:51

1

沒有規則聲稱您需要在REST論文或HTTP RFC中返回完整響應。後者(RFC 2616, HTTPbis version)有這樣說的201個Created狀態碼:

如果資源已經在源服務器上創建,響應應該是201(創建),幷包含描述狀態的實體該請求並引用新資源和位置標題。

返回已添加的信息是一個合理且完美的RESTful HTTP兼容的想法。

1

這完全取決於您的迴應,雖然它可能是一個想法提供一個鏈接到更多關於資源的信息。如果你想得到真正的喜歡,你可以指定一個microformat

相關問題