在.NET中设计用于Web API的相关业务实体的最佳方法是什么?

时间:2015-07-29 17:28:49

标签: c# asp.net-web-api odata asp.net-web-api-odata

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

商业实体1:具有以下属性的“车辆”:

  • VehicleId string
  • ModelId string

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

  • ModelId string
  • ModelDescription字符串

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

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

商业实体1:具有以下属性的“车辆”:

  • VehicleId string
  • ModelId Model

2 个答案:

答案 0 :(得分:1)

这完全取决于您使用API​​的方式以及它如何识别并保持一对多的关系。编写您的API,以便您的第一个消费者可以以高效的方式调用它,然后稍后担心调整它。

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

我认为这不是一个好的"这是做到这一点的方式"回答时不考虑客户端和服务器。

答案 1 :(得分: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框架的数据库,