wei*_*wei 6 graphql graphql-js graphql-tools
我想知道是否有办法在 GraphQL 中共享 Input 和 Type 之间的公共字段,这样我就不必在多个地方定义相同的字段集。
例子:
input PersonInput {
id: String!
name: String
address: String
}
type Person {
id: String!
name: String
address: String
}
Run Code Online (Sandbox Code Playgroud)
我知道 Fragment 可能是一个解决方案,但如果我的理解是正确的,使用 Fragment 总是需要您设置一个 ON 条件,使其看起来像这样:
Fragment PersonCommonFields on Person {
...
}
Run Code Online (Sandbox Code Playgroud)
似乎没有办法指定“on Person/PersonInput”。
小智 7
GraphQLfragments用于查询,而不是模式定义。
当我开始学习 GraphQL 时,我也对此感到恼火,因为我仍然在思考 REST。在大多数情况下,可以自由地将某些字段设置为不可为空或从输入/输出类型中完全删除它们是非常宝贵的。
例如
input CreatePersonInput {
name: String!
slug: String
address: String
}
type Person {
id: ID! # Autogenerated on the server
name: String!
slug: String! # Will always exist, either user provided or computed
# address: String # Omitted for security reasons
}
Run Code Online (Sandbox Code Playgroud)
乍一看似乎有很多额外的代码,但是对于长期项目而言,这为您带来了基于资源的架构的灵活性是值得的。我已经看到它帮助了几十次。
您还应该考虑behavior/task-based突变过度resource或“贫血突变”
我强烈建议学习胖查询并阅读中继规范。即使您最终不想在客户端上使用 Relay,遵循他们的一些规则也可以真正消除对 GraphQL 的常见误解。
| 归档时间: |
|
| 查看次数: |
2803 次 |
| 最近记录: |