将 graphQL 片段添加到模式中,并且可用于所有查询
Posted
技术标签:
【中文标题】将 graphQL 片段添加到模式中,并且可用于所有查询【英文标题】:Add graphQL fragment to schema, and have available for all queries 【发布时间】:2018-03-23 22:15:12 【问题描述】:以下在graphiQL中正确执行
fragment BookGridFields on Book
_id
title
allBooks
...BookGridFields
我的问题是,可以在我的架构中指定片段,就在我的书类型定义的下方,就像这样
type Book
_id: String
title: String
pages: Int
weight: Float
authors: [Author]
fragment BookGridFields on Book
_id
title
这样我就可以像这样运行查询
allBooks
...BookGridFields
无需将片段定义为我的查询的一部分。
目前上述错误与
未知片段“BookGridFields”
【问题讨论】:
我不认为您在服务器上定义片段。您在执行查询时在客户端上定义它们:graphql.org/learn/queries/#fragments 和 dev.apollodata.com/react/fragments.html 谢谢 - 是的,我已经看到了这两个 - 似乎是不可能的,但我想我会在这里检查专家:) 您没有用 apollo 标记问题,但我发布的链接允许可重复使用的片段。我想这取决于您使用的客户端库。 目前绝对不可能作为 vanilla GraphQL 的一部分。您希望从服务器共享片段中获得什么好处? @stubailo 我对 GraphQL 还是很陌生 - 直观地说,在我的模式中定义它似乎更有意义,并考虑到应用程序用例,所以我不会必须在应用程序代码中维护和传递片段。但是你的推文很有意义。如果您想将其添加为答案,我很乐意投票并接受,以使任何可能发现此问题的人受益。 【参考方案1】:根据 graphql 文档,我看到片段是查询 api 的一部分,而不是用于设置模式的有效语法。这使我得出结论,目前无法在架构中指定片段。
https://graphql.org/learn/queries/#fragments
【讨论】:
这使得定义接口非常非常愚蠢。 @BenjaminR OT,也许,但你能详细说明你的意思吗? @jberryman 我认为 BenjaminR 意味着接口实现中存在不必要的冗余(必须在接口和实现类型中指定字段,这首先会降低使用接口的价值。)我使用 Dgraph 并注意到它们允许在其实现类型中不重复接口字段的模式,这真的很棒。以上是关于将 graphQL 片段添加到模式中,并且可用于所有查询的主要内容,如果未能解决你的问题,请参考以下文章