對不起,奇怪的標題。這是我的情況。REST uri POST和返回(GET)
我有一個產品表,每個產品的名稱和顯示順序。客戶可以改變產品的顯示順序。該表是使用jQuery.tmpl生成的,並且在WCF下使用GET來拉取數據。從db中取出的產品是通過CategoryID。
當用戶更改網格中產品的顯示順序時,需要使用POST更新產品。數據更新後,服務器需要發送更新的json對象來更新表。
問題:如何爲此場景構建POST POST uri?這是我現在擁有的。
[OperationContract]
[WebInvoke(
Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "product/form/{categoryId}")]
[return: MessageParameter(Name = "products")]
List<Product> UpdateProduct(string categoryId);
我相信我的uri更新資源是正確的,因爲我通過分類id更新單個產品。但是,我想根據POST所做的更改返回一組新的產品,而不必進行單獨的GET調用。
不確定這是否「正確」。那些咖啡師讓我驚慌失措!
謝謝。
UPDATE 我開始考慮更多關於我上面的代碼,並意識到這裏還有更多。 我的情況的現實情況是,我試圖通過ProductID更新特定產品,然後按類別ID返回產品列表。本質上是一個POST和一個GET。那麼我的URI會是這樣嗎?
[WebInvoke(
Method = "POST",
UriTemplate = "product/form/{productId}/products/{categoryId}")]
[return: MessageParameter(Name = "products")]
List<Product> UpdateProduct(string productId, string categoryId);
用我這樣的方法?
public static List<Product> UpdateProduct(string productId, string categoryId)
{
ProductManager.UpdateProduct(int.Parse(productId));
return ProductManager.GetProducts(int.Parse(categoryId));
}
UPDATE2
這個問題已經與丹尼爾提供的鏈接地址here。儘管在一次POST調用中處理所有事情似乎是有道理的,但我認爲它不符合REST的精神並將Uri用作資源。使用POST然後GET調用似乎是答案。感謝丹尼爾。他的評論很好。
嗨丹尼爾。在我的情況下,顯示順序是我的產品表中的一列。這對我的應用程序是必需的。如果我正確理解你,你建議2個電話來執行這個操作? – trevorc 2010-10-07 18:02:33
@ user423311:不,只有一個電話是你建議的。基本上,我只指出了不同的URI結構。 – 2010-10-07 18:07:58
好的。所以我發佈的一般前提是可以的,因爲我是PUT/POST(更新)到更新uri,但也返回了來自該更新uri的一組數據。 FYI我選擇POST是因爲我閱讀@ http://www.roberthahn.ca/articles/2007/04/06/url-design/和@ http://jcalcote.wordpress.com/2008/10/16/放置或者發佈其餘的故事/ – trevorc 2010-10-07 18:17:10