GraphQL,如何处理连接到数百个表

Posted

技术标签:

【中文标题】GraphQL,如何处理连接到数百个表【英文标题】:GraphQL, How handle connecting to hundreds of Tables 【发布时间】:2019-07-02 02:02:30 【问题描述】:

我们正在实施 GraphQL,并且需要从数百个数据库表中提取数据。

我们希望以易于遍历的方式管理我们的 API,并将数据分解为逻辑组。

有没有办法实现这样的东西:

Group1> Queries
        Mutations
        Subscriptions
Group2> Queries
        Mutations
        Subscriptions
...

或者我们是否需要为每个 GraphQL 数据分组创建单独的端点?

【问题讨论】:

简短的回答是否定的,GraphQL 没有提供这样的机制。只有 3 种根类型,它们不能是像 Union 或 Interface 这样的抽象类型。通过创建这样的操作组,您试图实现的目标是什么?您是否为不同类型的客户提供服务,每个客户都需要不同的操作集? 感谢@DanielRearden 的回答。我们有三个主要的用户组和数百个表。所以我们不希望同时显示 2 倍的数百个查询和 3 倍的数百个突变。我们希望能够对数据进行分组。所以我们可能只需要创建三个不同的路由。 【参考方案1】:

如果只是美学问题,我真的不会担心您的 QueryMutation 类型上的字段数量。无论您的客户团队使用GraphiQL 和GraphQL Playground 来编写他们的查询(他们确实应该使用其中一种工具),它们都具有自动完成功能,可以轻松地从数百个列表中选择特定字段。

您可能正在与特定的客户组合作,这些客户在对他们可见的数据方面有特定需求,或者就他们可以对基础数据执行的突变类型而言。在这些情况下,拥有具有不同架构的独立端点可能是有意义的,每个端点都仅限于特定客户端组可以看到和执行的操作。如果您使用的是 Apollo,您甚至可以从基本模式开始,然后使用 schema transforms。但是,如果特定客户端无论如何都只是要对每个端点进行查询,则您可能不应该创建单独的端点——这会给客户端带来过度的负担。

当然,您可以简单地将每个根类型的字段嵌套在其他类型中。例如:

type Query 
  group1: Group1
  group2: Group2


type Group1 
  foo: Foo
  allFoos: [Foo!]!
  # other fields


type Group2 
  bar: Bar
  allBars: [Bar!]!
  # other fields

这非常适合您的查询类型,尽管我会caution against this kind pattern for mutations。当然,如果您了解其中的含义,它可能是适合您团队的解决方案。

【讨论】:

您好,谢谢您的回答。问题是我可能会有数百种类型,类型上的字段不是问题,而是类型的数量,然后它们的命名将开始变得晦涩难懂,需要一个词汇表才能知道每种类型是什么。我有基本上三类数据,所以我可以把它分成三个路线。所以这就是我可能要做的。我希望我可以在 GraphQL 中分解它,以便开发人员可以深入研究这三个领域。 Trulia 开发人员在 GraphQL 峰会上的这段视频表明,他们通过在类型前加上“命名空间”来处理他们的领域 - youtube.com/watch?v=eUrtRzqN0h0&t=755

以上是关于GraphQL,如何处理连接到数百个表的主要内容,如果未能解决你的问题,请参考以下文章

我们如何从 GraphQL 的 RequestContextHolder 获取 GraphQL 的 HttpServletRequest(DefaultGlobalContext)(使用 graphq

如何处理 Spark 中的多个 csv.gz 文件?

Java HornetQ 客户端中的线程处理

在 Oracle SQL Developer 中识别非空表

如何在 Databricks 中迭代以读取存储在数据湖不同子目录中的数百个文件?

无法使用 graphq-request 表示嵌套对象输入类型的数组