对不起,奇怪的标题。这是我的情况。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