【问题标题】:REST API - Reduce number of POSTS operationsREST API - 减少 POSTS 操作的数量
【发布时间】:2015-08-24 15:45:32
【问题描述】:

我设计了一些具有一些嵌套资源的 API,我想知道在创建一些记录时如何减少 POST 的数量。

例如,我有以下资源:

/orders/

/orders/{order_id}/products/

目前,如果我需要创建新订单或新订单的产品,我需要分别运行两个 POST,但我想减少此时间并只运行一个 POST。 这可能吗?有什么我可以阅读的文档吗?

谢谢

【问题讨论】:

标签: api rest post atomic api-design


【解决方案1】:

虽然您可能在其他帖子中找到了答案,但您的端点设计仍然存在一些问题。

您的端点给出的第一个直觉是产品资源可能存在于多个位置。

./orders/{order_id}/products/{prod_id}

./products/{prod_id}

您应该问自己的问题是:您真的要提及产品吗? 产品可以离开任何订单吗?

将资源放在 2 个不同的位置可能不是很好,因为您要管理 2 个具有相似行为的不同端点。保持两个端点之间的一致性并不容易。

我的 2 美分是为了避免使用术语产品,因为它可能与产品的单个实例混淆。例如,如果您销售toothbrush branded AAA, sku 1234,则订单不是由该产品组成,而是由您库存中的一件商品组成。该项目是toothbrush branded AAA, sku 1234 的“实例”。

据我了解,您并不是真正指的是产品,而是更多地指的是 stock-item,它应该是一个唯一的 ID。

如果您决定拥有资源stock-item,则该资源应在订购之前存在。我猜客户没有在您的库存中添加商品并同时购买此商品。

总之,我认为您在创建 orders 时根本没有创建 stock-item 资源,而只是对其进行了引用。

【讨论】:

  • 我希望/product/{prodId} 是产品在添加到订单之前的资源,而/orders/{orderId}/products/{prodId} 将是已添加产品的特定实例的端点到订单。更具体的资源可能只允许 PUT 或 DELETE 操作。您在订单上添加或删除对产品的引用。但是,/products/{prodId} 将允许 GET 和 PUT 操作,因为它允许您获取或替换给定资源的产品。
  • 为什么不呢。但再次从客户的角度来看,什么是什么并不明显。 REST 旨在自我解释。
  • 我认为这很明显,实际上。一个明显与订单相关,而另一个则没有。如果您认为这些需要明确不同的名称,那是您的特权,但我不认为 REST 强制要求您在此处提出的内容。
  • 假设您正在与团队的其他成员讨论产品。你指的是哪一个?总是有模棱两可的机会。 REST 可能不会要求您使用不同的术语。但是不管 REST 与否 REST 始终是一个很好的做法,为不同的含义有一个明确的、独特的术语。
猜你喜欢
  • 2017-03-21
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2023-03-08
  • 2023-03-31
  • 2021-06-08
  • 2017-04-05
  • 1970-01-01
相关资源
最近更新 更多