我正在尝试在.NET中设计业务实体,如下所示,将通过Web API / oData公开。
商业实体1:具有以下属性的“车辆”:
业务实体2:具有以下属性的“模型”:
现在,如果有人使用我的Web API仅获取Vehicle信息并且想要显示模型描述,那么他们需要进行2次HTTP调用,这将导致性能下降,特别是在慢速网络中。在这种情况下,我想知道什么是加载&的最佳方式。模拟嵌套的业务实体,通过Web API提供最佳性能?
我应该如下对我的Vehicle类进行建模,这对于REST / Web API设计来说真的是一个好习惯吗?对于下面的方法,实体似乎也因为包含的实体而变得太重。请指教。
商业实体1:具有以下属性的“车辆”:
答案 0 :(得分:1)
这完全取决于您使用API的方式以及它如何识别并保持一对多的关系。编写您的API,以便您的第一个消费者可以以高效的方式调用它,然后稍后担心调整它。
例如,在使用Ember Data的Ember.js应用程序中,您可以选择返回子ID,或者您也可以将整个子项作为属性嵌入到父级中,并且将在客户端上对其进行反序列化和跟踪作为个人模特。无论您是想以某种方式进行,还是完全取决于您的应用程序流程。我认识到Ember Data不是OData,但概念是一样的。
我认为这不是一个好的"这是做到这一点的方式"回答时不考虑客户端和服务器。
答案 1 :(得分:1)
我可能会将Vehicle
和Model
创建为
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框架的数据库,