2

我正在为我们的业务系统开发一个休息 API。到目前为止,我们有以下资源:

/sales/orders
/sales/orders/{orderno}
/sales/order-items

API 完成后会有很多资源,因此我们需要以一种好的方式对其进行结构化,使其易于理解。我的问题是:应该/sales/order-items改为/sales/orders/order-items?这里可能没有正确的答案,但你更喜欢什么?

还有一个问题:该sales/order-items资源将列出所有未清项目或所有已发货项目。无论状态如何(打开/已发货) ,都无法获得所有订单项目。资源 URI 可以是这样sales/order-items?orderstatus={OPEN/SHIPPED}的(orderstatus 查询参数将是强制性的)或者它可以是这样的两个资源sales/order-items/opensales/order-items/shipped. 什么是首选?

4

1 回答 1

1

资源是“可以命名的任何信息”。您的 URI 应该是基于实体的。'order-items' 不是实体,而是数据类型。

/sales/order/order-1456321是您最可能想要的实体。其中将包含所有订单项目的数据。

如果您希望限制访问,如果未提供查询字符串,则可以返回客户端错误。并拥有

/sales/order/order-12345?status=open

等希望这会有所帮助。

编辑:

/sales/order-items or /sales/orders/order-items?

这是特定领域的,确实应该由领域专家来回答。您的 URI 层次结构为您的资源提供范围(以及细节)。所以作为一个有根据的猜测,在“/sales/orders/”范围内有“order-items”是没有意义的,因为“order-items”不是“order”。

/sales/ordered-items 

似乎是最明智的答案。

就个人而言,不要过多地质疑您的领域,对业务流程和存储的信息有深入的了解可能会产生与这些建议类似的东西;

/sales/orders?status=open - Are all orders shipped at once?
/sales/orders/order-1234/packages?status=open - Are orders split into packages?
于 2012-09-26T14:32:40.517 回答