如何在 GraphQL 中添加列表
Posted
技术标签:
【中文标题】如何在 GraphQL 中添加列表【英文标题】:How to add List in GraphQL 【发布时间】:2017-12-27 00:13:44 【问题描述】:我是 graphQL 的新手。我的 Ghapgh Ql 查询需要以下格式 "offers": false, "new": true, "favourites": true
其中提供、新的、收藏夹是 java 类中的过滤器。查询可以有任意数量的此类过滤器。如何编写 graphql 查询,该查询将接受过滤器列表并像上面一样构建查询。我试过写上面的 hadcoded 查询。
【问题讨论】:
【参考方案1】:This question 与您的类似,因为它讨论了使用 GraphQL 进行过滤的概念。还有一个关于第一个答案的评论导致一些 GraphCool 文档讨论他们的过滤方法。 (GraphCool Docs)。我在 Java 方面不是很了解,所以希望这仍然有帮助。
一般来说,您可以在查询中包含可选参数,如果存在,则在您的解析中过滤您的结果。
Resolves 将 args 作为第二个参数。根据您想提供多少潜在过滤器,您可以选择正确的实现。
两个选项是,1) 有一个参数filter
,它接受一个过滤器列表。 (这类似于 GraphCool;2)只需使用变量名作为 args 并过滤这些东西。
因此,对于您的示例,我不确定您的模型到底是什么样子或您使用的是什么类型的 DB/ORM,但是如果您使用选项 2,您基本上可以在您的解决方案中过滤结果( JS 对不起,我不是 java 专家)。
resolve: (_, args, context) =>
const result = someDbInteractionForResult()
result.filter( (item) =>
for (const [filter, value] of Object.entries(args))
const passFilter = value === item.filter;
if (!passFilter)
return false;
return true;
这仍然是类似于以 GraphCool 方式传入过滤器的方法。我认为决定只是如果您还有其他args
,您也将包括在内。如果是这样,那么您将希望在其自己的对象中屏蔽您的过滤器,以便更轻松地分离您的关注点。
【讨论】:
以上是关于如何在 GraphQL 中添加列表的主要内容,如果未能解决你的问题,请参考以下文章
在 GraphQL 查询中分组后如何限制和跳过标签列表页面的分页?