REST 创建具有复合 ID 的资源

REST Create resource with composite id

我有 3 个数据库实体。 产品 - ID,名称。 /产品 订单 - ID,日期。 /命令 OrderDetail - orderId、productId、价格。订单/{orderId}/orderDetails

我想知道 creating/updating orderDetail 实体。对于 PUT 场景,很明显。我使用 next url orders/{orderId}/orderDetails/{productId} 并以新价格传递有效负载。 但问题是关于 POST (创建实体)场景。我应该提供两个 id(但创建实体通常不接受用户的 id,而是在背面创建它),所以 POST 方法是否应该实现(如果是,我应该如何提供 productId,通过url 或负载)或者我可以仅使用 PUT 方法创建和更新订单详细信息?

谢谢!

如果您将 OrderDetail 视为一种资源(可以在其上使用 HTTP 动词的东西),您还应该为其赋予一个自己的身份,而不是一个取决于其值的身份。

使用您的 URL 方案,您例如不能两次订购具有不同尺寸或颜色的同一产品(假设产品 ID 与尺寸或颜色无关)。如果更新更改了产品 ID,您将无法 PUT OrderDetail 的更新版本。

也许该缺陷来自 DB table 设计(无论出于何种原因)决定在没有订单详细信息 ID 的情况下进行操作,也许您无法更改它。

我要么

  • OrderDetail 一个自己的 ID 或
  • 使其成为 Order 实体的(Json?)表示的元素,而不作为 HTTP 资源公开。

一些补充意见:

I use next url orders/{orderId}/orderDetails/{productId} and pass payload with new price.

我总是在有效负载中传递完整的信息,即订单 ID、产品 ID 和价格,而不是依赖有效负载和 URL 之间的混合。