【问题标题】:MVC 4 Web API + EntityFramework: Handling external resource dependenciesMVC 4 Web API + EntityFramework:处理外部资源依赖
【发布时间】:2013-07-17 19:16:44
【问题描述】:

所以我遇到了这种情况,可以说我正在制作两个 API;汽车 API 和 AutoService API。 Car API 管理与汽车实体相关的资源。 AutoService API 管理与为汽车提供维修服务的汽车服务零售实体相关的资源。

假设一个应用程序同时使用这两种 API。它为特定汽车实体创建汽车服务实体。因此,它使用 Car API 创建/编辑汽车资源,然后将其传递给 AutoService API 以为该特定汽车实体创建服务日志。这意味着 AutoService API 中的服务日志实体正在引用作为 API 外部资源的实体。

问题变成了,处理这种依赖关系的最佳实践是什么?我最初的想法是在服务实体中创建两个属性;外部所有者和外部所有者主机。 externalOwner 实体将映射到汽车实体的 id。 externalOwnerHost 将描述外部所有者的来源,比如/auto/car。有了这个关联,为应用程序客户端创建一个约定,以自行确定如何访问给定 externalOwnerHost 的外部所有者实体。所以对于这个例子,应用程序应该足够聪明,知道使用GET /auto/car?fields=,因为它知道资源的主机。这是最佳实践吗?你们有更好的想法吗?

【问题讨论】:

  • 当您说 两个 API 时,您是指在同一解决方案中分离 Web API 项目还是只是两个不同的资源端点。我试图做出决定,但没有定论。
  • 它们是独立的 Web API 项目。将它们解耦的目的是使它们可以被独立地重复使用和部署。

标签: c# entity-framework asp.net-mvc-4 asp.net-web-api


【解决方案1】:

如果您需要在不了解依赖项的情况下调用依赖项,我会将用于调用实体的子 URL 保存在单个字段中(例如 /auto/car/12?fields=...)。

但我想知道这有多容易,因为 API 的使用者需要了解如何使用从 API 返回的数据。在您的示例中,这意味着 AutoService API 必须了解如何处理 Auto API 数据。

因此,我的最终建议取决于您的设计目的。如果这是为了显示,我会让护理汽车服务知道 ID 并知道如何包含汽车特定控件。如果这是为了处理,我几乎会有一个 CarId 并让 AutoService API 准确了解如何获取数据以及如何在代码中使用它;不在数据库中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多