3

我正在尝试确定基于主 ID 实现详细记录检索的最佳方法。

显然,您将为 master 和 detail 设置 API 控制器。

我考虑过的解决方案:

  • 让 API 使用者使用 OData 获取由主 ID 过滤的所有详细信息。虽然我对这个解决方案没有意见,但我觉得把它放在 API 使用者身上有点不好,我觉得它应该由 API 在内部处理
  • 违反仅具有 Get/Put/Post/Delete 方法的约定,并在细节控制器上创建“GetMastersDetails”操作并使其可通过路由访问。虽然这肯定会奏效,但我觉得这偏离了 Web API 的全部意义(在一定程度上)。
  • 创建一个名为“MastersDetailsController”的第三个控制器,该控制器将具有基于具有不同可能返回类型的主 ID 的 Get:
    • 这将返回详细信息 ID 列表,然后将用于调用详细信息控制器上的 Get 以获取这些实际详细信息
    • 这将返回一个实际细节对象的列表。我不喜欢的是控制器返回的类型与其所基于的类型不同。
4

2 回答 2

0

我会选择#1或#2。

对于 #1,OData 支持不仅支持您描述的场景,而且还提供了许多未来可能需要的附加功能。

对于#2,我认为它不会脱离 Web API 的重点。也许有点来自真正的 RESTful 服务,但它易于实现且易于理解。

于 2012-11-17T06:14:12.530 回答
0

选项2会很好。选项 1 会带来更多风险,具体取决于您的场景以及您希望允许用户获得的内容。

将自定义方法添加到 ApiController 并不是真正的“违反约定”。你可以随心所欲地这样做。如果您这样做并使用了错误的 HTTP 方法(即,当您在自定义方法中删除某些内容时使用 GET),则只会“违反约定”。

于 2012-11-20T16:32:19.837 回答