Graphql 特定的筛选器应该表示为显式命名的字段,还是具有筛选器参数的通用字段?

Graphql 特定的筛选器应该表示为显式命名的字段,还是具有筛选器参数的通用字段?,graphql,Graphql,在通过GraphQL表示数据过滤器时,我们是应该为该过滤器创建显式命名的字段,还是应该向将应用过滤器的更通用的列表类型字段添加参数 例如,如果我有一个名为teams的字段,但我想提供过滤teams提供的数据的能力,只过滤活跃(相对于非活跃)的团队,那么我是否应该通过GraphQL将该过滤器作为teams字段上的参数公开,或者我应该创建一个名为activeTeams的新字段吗 我认为,从长远来看,清晰、明确命名的字段可能会扩展得更好,也不会那么混乱,因为不会有关于参数彼此配对时如何工作的问题,等等

在通过GraphQL表示数据过滤器时,我们是应该为该过滤器创建显式命名的字段,还是应该向将应用过滤器的更通用的列表类型字段添加参数

例如,如果我有一个名为
teams
的字段,但我想提供过滤
teams
提供的数据的能力,只过滤活跃(相对于非活跃)的团队,那么我是否应该通过GraphQL将该过滤器作为
teams
字段上的参数公开,或者我应该创建一个名为
activeTeams
的新字段吗

我认为,从长远来看,清晰、明确命名的字段可能会扩展得更好,也不会那么混乱,因为不会有关于参数彼此配对时如何工作的问题,等等


我想了解Facebook是如何实现这一点的,或者其他人是如何实现这一点的。

您应该在
团队
字段中添加过滤器作为参数,因为这是一种更具伸缩性的方法。引入一个新的过滤器意味着只需要添加一个参数。然而,多字段方法要求每个可能的组合具有指数数量的字段

不要忘记,如果希望获取同一组件中团队的多个查询,还可以在客户端上别名字段:

query on Viewer {
  activeTeams: teams(active: true) { ... }
  inactiveTeams: teams(active: false) { ... }
}

但是,对于params就不能说同样的话吗?如果你有很多过滤器,那么你必须理解当与其他过滤器混合时,多个过滤器是如何应用的,等等?我只是想大声说出来。也许这主要取决于人们的意见。我想特定字段的一个问题是,您根本无法选择组合多个过滤器。您必须了解多个过滤器如何组合。即使每个组合都有一个字段,如果你不能确定过滤器将如何组合,你怎么知道需要哪个字段呢?我认为没有任何一种真正正确的方法可以做到这一点,尽管在我对Facebook模式的经验中,我看到我们两个都使用,参数化更为常见。这对我们来说非常有效。