我正在使用一些 API 制作一个休息的 asp.net 核心,稍后我将与 Android 应用程序一起使用。
我对一些数据库操作有些疑问。
让我们假设我的数据库中有一张 Tickets 表,其中包含 id、title 和 author 列(这是一个外键,它指的是 User 表 (id - name)) 现在,当 Sndroid 应用程序请求票证列表时,我进行了选择并返回了作者的 id、标题和姓名,因此我制作了一个类票证,如下所示:
class Ticket{
private int id{get; set;}
private string Title {get; set;}
private string author {get; set}
}
现在假设应用发送 POST 请求以添加新票证。最佳做法是什么? 发送作者的标题和姓名(客户端在本地数据库中有作者表的副本)或标题和 >id 作者。 因此,在第一种情况下,我有一个类似于上面的新票证的类(没有 id),我必须进行选择以获取作者的 id 并在数据库中插入。在第二种情况下,我有一个这样的类:
class Ticket{
private string Title {get; set;}
private int author {get; set}
}
并且不需要进行选择来获取作者的 id。 哪一个是最好的?有两个不同的类或只有一个在数据库上有多个操作(以获取作者的 id)。 现在我简化了这个例子,但想象一下,票有更多的外键列,什么是最好的?
答案 0 :(得分:1)
您应该了解您的域对象是什么。根据描述,我认为您至少有两个:作者和票证。
在这种情况下,作者创建了一张票,例如在 POST 上作者/{authorId}/tickets。在这种情况下,您返回一张票,即没有作者 ID,因为作者已经为客户所知(TicketDTO:id,title。参见下面的 DTO)。
此外,您对任何特定 EP 的回馈取决于您的业务需求,即您的 API 客户的需求。你有很多客户,其中一些是 3d 派对?使您的 API 尽可能通用。你有一个你自己写的客户,你确定其他客户不会来?如果需要,请返回更多信息,特别是如果您可以节省一些调用从而提高性能。
最后但并非最不重要的是,您从数据库获取的对象不是您通过 REST API (DTO) 发送的对象。 DTO 可能包含来自多个 DB 对象的信息。您可以根据后端需求创建数据库,并根据客户端需求创建 REST API。然后将 DB 对象映射到 DTO,例如使用 AutoMapper 或其他一些解决方案。