gpt4 book ai didi

asp.net - 用于 POST 和返回 (GET) 的 REST uri

转载 作者:行者123 更新时间:2023-12-02 17:33:48 27 4
gpt4 key购买 nike

很抱歉这个奇怪的标题。这是我的情况。

我有一个产品表,其中包含每个产品的名称和显示顺序。客户可以更改产品的显示顺序。该表是使用 jQuery.tmpl 生成的,并且使用 WCF 下的 GET 提取数据。从数据库中提取的产品是按 CategoryID 排列的。

当用户更改网格中产品的显示顺序时,需要使用 POST 更新产品。数据更新后,服务器需要发回更新后的 json 对象来更新表。

问题:如何针对这种情况构建我的 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 调用。

不确定这是否“正确”。那些餐馆里的人让我害怕!

谢谢。

更新我开始更多地思考上面的代码,并意识到这里发生了更多事情。我的实际情况是,我正在尝试按 ProductID 更新特定产品,然后按 CategoryID 返回产品列表。本质上是一个 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));
}

更新2

此问题已得到解决 here丹尼尔提供的链接。尽管在一个 POST 调用中处理所有内容似乎很有意义,但我认为这不符合 REST 的精神以及使用 Uri 作为资源。使用 POST 然后使用 GET 调用似乎是答案。感谢丹尼尔。他的评论很好。

最佳答案

更新显示顺序的 POSTPUT 请求不应返回任何内容,指示请求状态的状态代码除外。您应该发出单独的 GET 请求来接收排名前 15/25/50 等产品的新列表:

If a new resource is created, the origin server MUST inform the user agent via the 201 (Created) response. If an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to indicate successful completion of the request. If the resource could not be created or modified with the Request-URI, an appropriate error response SHOULD be given that reflects the nature of the problem.

From: Section 9.6 of the HTTP 1.1 Specification

您可能还有兴趣查看HTTP Spec (第 9.5 和 9.6 节)以及以下 Stack Overflow 帖子:

<小时/>

也就是说,我可以想到两种方法来更新产品的显示顺序:

  1. 发送特定product_id 的上移或下移请求。只要单击向上/向下按钮即可调用此请求。

  2. 发送整个类别的完整 order_rank 列表。

我相信后者更实用,但您可能想公开这两个操作。对于第一种方法,POST 动词似乎合适,但对于第二种方法,我会使用 PUT

对于第一种方法,我想象 URI 如下所示:

POST /products/{productId}/move-up
POST /products/{productId}/move-down

上面表明我们正在创建一个“上移”或“下移”命令。动词 POST 表示“创建”,名词(操作)是“上移”或“下移”命令,该命令作用于特定的 Product_id。

对于第二种方法,我会看到如下所示的 URI:

PUT /categories/{categoryId}/order-rank

我们可以向其传递带有 order_rank 编号的每个 Product_id 的 JSON/XML/etc 表示形式。动词 PUT 表示“更新”,名词是特定类别 ID 的“订单排名”。

关于asp.net - 用于 POST 和返回 (GET) 的 REST uri,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3884183/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com