特定过滤器应该表示为明确命名的字段,还是带有过滤器参数的通用字段?

Should specific filters be expressed as an explicitly named field, or a generic field with a filter param?

当通过 GraphQL 表达数据过滤器时,我们应该为该过滤器创建明确命名的字段,还是应该将参数添加到将应用该过滤器的更通用的列表类型字段?

例如,如果我有一个名为 teams 的字段,但我想提供过滤数据的功能,由 teams 提供,仅过滤到活跃的团队(与不活动),我应该通过 GraphQL 将该过滤器公开为 teams 字段上的参数,还是应该创建一个名为 activeTeams 的新字段?

我在想清楚、明确命名的字段可能会更好地扩展并且在长 运行 中不会那么混乱,因为不会有关于参数在彼此配对时如何工作等问题。

我想获得有关 Facebook 如何处理此问题或其他人如何处理的反馈。

您应该将过滤器作为参数添加到 teams 字段中,因为这是更具可扩展性的方法。引入新的过滤器意味着只需要添加一个参数。而 multiple-fields 方法需要每个可能组合的字段数量呈指数级增长。

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

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