REST API-规范化数据中的循环引用

时间:2018-11-13 10:37:47

标签: c# asp.net asp.net-mvc rest entity-framework-6

我正在为数据库开发一个REST API,其中包含有关虚拟机和服务器的信息以及有关它们的某些信息;已安装软件,磁盘,存储和可用存储等。

我希望能够使用此REST API来直接通过应用程序从计算机更新数据库,并希望拥有一个Web前端,用户可以在其中查询以查找各种计算机的当前状态。 / p>

我正在使用Entity Framework和ASP.NET MVC来搭建API,但是遇到了我没有必要经验来解决的问题。过去我对数据库的工作更加直接和具体,我从未创建过API,因此以前不需要序列化数据库中的数据。

我发现的问题是,当序列化数据时,以一对多和多对多的关系进行操作,例如,一个对象可能包含一系列相关对象,而每个对象可能都包含对父对象的引用,然后再次包含相同的列表。因此,在进行序列化时,最终可能会将这些对象无限递归地加载到序列化响应中。例如:

class Machine {
    int ID;
    string Name;
    List<Software> Software;
}

class SoftwareInstallation
{
    int MachineID;
    int SoftwareID;
}

class Software {
    int ID;
    string Name;
    List<Machines> Machines;
}

这里是多对多关系。如果我加载计算机,它将有一个软件列表,每个软件都有一个计算机列表。当我只想要一个对象时,我最终可能会加载整个数据库。

我想知道在API设计中解决此问题的常用方法是什么。我不想为API调用发送太少的数据,否则客户端将有太多工作要做,但我也想避免发送太多或更糟糕的结果是响应大小无限。我知道诸如惰性和急速加载等概念,以及如何使用Entity Framework调用它们,但是我不确定何时使用哪种方法,以最大程度地减少所需的API调用次数,同时降低加载过多的风险。 / p>

0 个答案:

没有答案