特定过滤器应该表示为明确命名的字段,还是带有过滤器参数的通用字段?
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) { ... }
}
当通过 GraphQL 表达数据过滤器时,我们应该为该过滤器创建明确命名的字段,还是应该将参数添加到将应用该过滤器的更通用的列表类型字段?
例如,如果我有一个名为 teams
的字段,但我想提供过滤数据的功能,由 teams
提供,仅过滤到活跃的团队(与不活动),我应该通过 GraphQL 将该过滤器公开为 teams
字段上的参数,还是应该创建一个名为 activeTeams
的新字段?
我在想清楚、明确命名的字段可能会更好地扩展并且在长 运行 中不会那么混乱,因为不会有关于参数在彼此配对时如何工作等问题。
我想获得有关 Facebook 如何处理此问题或其他人如何处理的反馈。
您应该将过滤器作为参数添加到 teams
字段中,因为这是更具可扩展性的方法。引入新的过滤器意味着只需要添加一个参数。而 multiple-fields 方法需要每个可能组合的字段数量呈指数级增长。
如果您希望在同一组件中获取团队的多个查询,请不要忘记您还可以在客户端上为字段设置别名:
query on Viewer {
activeTeams: teams(active: true) { ... }
inactiveTeams: teams(active: false) { ... }
}