DTO和API资源有什么区别?

4

我正在学习ASP.NET Core有关如何创建RESTful API的教程和文章。在新的演示文稿和文章中,人们似乎将DTO称为API资源。这两个概念是相同的还是有区别?是否有标准/约定可供遵循,还是只是基于个人观点而定?

4个回答

3
在REST或Web API中,资源是方法所操作的对象。例如,获取联系人列表、按ID获取特定联系人、更新联系人、删除联系人 - 联系人就是资源。
DTO(数据传输对象)是实现这种资源的一种方式。当API修改关系型数据库中的数据时,通常会使用它。人们发现将联系人数据库实体直接返回给客户端的Web API存在问题。因此,他们将联系人实体映射到联系人DTO中。
因此,Web API资源可能是DTO,但不一定如此。这取决于您的情况。想象一下,您有一个Web API来获取/设置设备上的时间。您不需要为此创建DTO,只需使用表示日期的字符串即可。在这种情况下,API的资源将是一个字符串。

我认为这个问题是关于创建特殊的客户端类/对象,后缀为“Resource”,并且与域模型具有不同形状的对象是否与DTO相同。我确信答案是肯定的。 - PakiPat
它们可以是相同的东西,但不一定是。想象一下你有一个只读服务,返回自1999年以来表示秒数的长整型,表示系统已经使用了多长时间。这个长整型是一种资源,但不是数据传输对象(DTO)。 - GlennSills
DTO的定义是错误的。DTO与数据库无关。而且DTO不是资源。 - Jordan Silva

1
这两个概念是同一个概念的不同名称,还是它们之间有区别吗?
根据 MDN,资源是HTTP请求的目标。这意味着在PUT请求中,它是请求正文。在GET请求中,它是响应正文。 DTO 是一个聚合数据结构,旨在减少远程调用的数量(可以在Web API上下文中或不在其中)。
是否有要遵循的标准/约定,还是只基于个人观点?
我在不同公司工作时看到的是,人们混淆这些概念,并倾向于在所有IO类后缀DtoResource,这是一种糟糕的做法。尝试理解每个概念的意图并正确应用它们,只需记住你不需要给你的类后缀。

0

如果我理解正确,我认为问题是是否拥有特殊的客户端类/对象后缀为'Resource'(例如,EmployeeResource),并且与域模型(在本例中为Employee)具有不同的“形状”,是否等同于拥有DTO。

我确信答案是肯定的。


0

它们是不同的概念,但有点相似。

DTO(数据传输对象)是适合于从视图/客户端传递的对象。其目的是删除您不想要的信息,将对象结构平坦化为更易消耗的形式或使用其他各种方式装饰数据。它们位于数据模型和您想要提供数据的任何内容之间。

REST是一种高度基于约定的方式,用于为CRUD类型操作提供API。尽管在教程中,REST API可能使用与原始数据模型非常不同的DTO,但通常API只是数据库上的一个薄层,并附带身份验证/授权检查。


1
REST 不仅仅是关于 CRUD 操作。REST 是提供面向资源的服务接口。使用 REST 实现非 CRUD 操作,例如启动后台处理任务,是非常容易的。 - RAM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接