1

我正在尝试在 .NET 中设计业务实体,如下所示,这些实体将通过 Web API/oData 公开。

业务实体 1:“车辆”,具有以下属性:

  • VehicleId 字符串
  • 型号 ID 字符串

业务实体 2:“模型”,具有以下属性:

  • 型号 ID 字符串
  • 型号描述字符串

现在,如果有人使用我的 Web API 仅获取车辆信息并且还想显示模型描述,那么他们需要进行 2 次 HTTP 调用,这将导致性能下降,特别是在慢速网络中。在这种情况下,我想知道加载和建模嵌套业务实体的最佳方法是什么,这将通过 Web API 提供最佳性能?

我应该如下建模我的 Vehicle 类吗?这真的是 REST/Web API 设计的好习惯吗?对于以下方法,实体似乎也因为包含实体而变得太重。请指教。

业务实体 1:“车辆”,具有以下属性:

  • VehicleId 字符串
  • 型号 ID 型号
4

2 回答 2

1

我可能会创建VehicleModel作为

public class Vehicle
{
    public string Id { get; set; }
    public string ModelId { get; set; }

    public Model Model { get; set; }
}

public class Model 
{
    public string Id { get; set; }
    public string Description { get; set; }
}

当您的 API 客户端请求车辆时,Model如果需要,我会填充属性并将其保留为null好像不需要此信息一样。

这样一来,如果您只需要车辆数据,您就可以灵活地不加载模型信息,而如果您需要车辆和模型,则只需执行 1 个 API 调用。这也适用于具有外键和任何 ORM 框架的数据库,

于 2015-07-29T18:55:59.337 回答
1

这完全取决于什么在使用您的 API,以及它如何识别和保持一对多关系。编写您的 API,以便您的第一个使用者可以以高性能的方式调用它,然后再担心对其进行调整。

例如,在使用 Ember Data 的 Ember.js 应用程序中,您可以选择返回子 ID,或者您也可以将整个子 ID 作为属性嵌入到父级上,并将在客户端作为个体进行反序列化和跟踪模型。您是否想以一种方式或另一种方式完全取决于您的应用程序流程。我认识到 Ember Data 不是 OData,但概念是相同的。

如果不考虑客户端和服务器,我认为没有一个好的“这是这样做的方法”的答案。

于 2015-07-29T17:37:09.423 回答