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】:如果只是美学问题,我真的不会担心您的 Query
或 Mutation
类型上的字段数量。无论您的客户团队使用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