【发布时间】:2018-09-06 04:23:29
【问题描述】:
据我了解,Data Transfer Objects (DTO) 通常是小型、扁平、无行为、可序列化的对象,其主要优点是易于跨网络传输。
GraphQL 有以下几个方面:
- 鼓励服务rich object graphs,这(无论如何在我的脑海中)与 DTO 的“扁平化”部分相矛盾,
- 让客户choose exactly the data they want,解决“小”部分,
- 返回JSON-esque objects,用于处理“无行为”和“可序列化”部分
GraphQL 和 DTO 模式是否相互排斥?
这就是导致这个问题的原因:我们设想了一个带有网关的微服务架构。我正在设计一个 API 以适应该架构,该架构将服务(除其他外)geometries。在许多(可能是大多数)情况下,几何图形对客户端应用程序没有用处,但它们在其他应用程序中至关重要,因此必须提供服务。然而,它们是序列化的,几何图形可能很大,因此让客户可以选择拒绝它们可以节省大量带宽。我见过的处理几何图形的 RESTful API 通过在查询字符串中提供 "returnGeometry" parameter 来做到这一点。我从未对这种方法感到完全满意,我最初设想为一组相当深的相关/嵌套返回对象提供服务,其中许多客户会选择拒绝。所有这些都让我考虑使用 GraphQL 接口。随着设计的进展,我开始考虑扁平化输出(完全或部分),这导致我考虑 DTO 模式。所以现在我想知道是否最好将所有内容扁平化为 DTO 并跳过 GraphQL(我想是支持 REST 吗?)。我考虑过使用 GraphQL 服务的 DTO 的中间立场,让客户选择他们想要的属性,但我想知道这是否不恰当地混合了模式和技术。
【问题讨论】: