POST 请求的最佳实践

时间:2021-02-03 14:22:07

标签: c# sql asp.net kotlin backend

我正在使用一些 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)。 现在我简化了这个例子,但想象一下,票有更多的外键列,什么是最好的?

1 个答案:

答案 0 :(得分:1)

您应该了解您的域对象是什么。根据描述,我认为您至少有两个:作者和票证。

在这种情况下,作者创建了一张票,例如在 POST 上作者/{authorId}/tickets。在这种情况下,您返回一张票,即没有作者 ID,因为作者已经为客户所知(TicketDTO:id,title。参见下面的 DTO)。

此外,您对任何特定 EP 的回馈取决于您的业务需求,即您的 API 客户的需求。你有很多客户,其中一些是 3d 派对?使您的 API 尽可能通用。你有一个你自己写的客户,你确定其他客户不会来?如果需要,请返回更多信息,特别是如果您可以节省一些调用从而提高性能。

最后但并非最不重要的是,您从数据库获取的对象不是您通过 REST API (DTO) 发送的对象。 DTO 可能包含来自多个 DB 对象的信息。您可以根据后端需求创建数据库,并根据客户端需求创建 REST API。然后将 DB 对象映射到 DTO,例如使用 AutoMapper 或其他一些解决方案。