我想知道是否可以在GraphQL中的Input和Type之间共享公共字段,这样我就不必在多个地方定义同一组字段。
示例:
input PersonInput {
id: String!
name: String
address: String
}
type Person {
id: String!
name: String
address: String
}
我知道Fragment可能是一个解决方案,但是如果我的理解是正确的,使用Fragment总是需要您设置一个ON条件,使其看起来像这样:
Fragment PersonCommonFields on Person {
...
}
似乎无法指定“在Person / PersonInput上”。
答案 0 :(得分:2)
GraphQL fragments
用于查询,而不是架构定义。
当我开始学习GraphQL时,我也为此感到恼火,因为我仍在思考RESTful。在大多数情况下,将某些字段设置为不可为空或将它们完全从输入/输出类型中删除的自由是非常宝贵的。
例如
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
}
乍看起来似乎有很多额外的代码,但是对于长期项目而言,为基于资源的模式带来的灵活性是值得的。我看过数十次。
您还应该考虑behavior
或“ anemic mutations”上的task-based
/ resource
突变
我强烈建议您学习fat queries,并阅读有关中继规范的信息。即使您最终不想在客户端上使用中继,遵循他们的一些规则也可以真正消除对GraphQL的常见误解。
答案 1 :(得分:0)
看看这个:https://www.apollographql.com/docs/guides/schema-design.html
我认为有两种选择:
使用interface
定义常见的schema
字段
使用es6
字符串模板语法。像${common}