假设我有两种通过GraphQL API管理的类型:
type Parent {
id: ID
name: String
children: [Child!]
}
type Child {
id: ID
name: String
}
query {
parents(): Parent
}
mutations {
addParent(in: ParentInput!): Parent!
addChild(parentID: ID!, in: ChildInput!): Child!
updateChild(childID:ID!, in: ChildInput!): Child!
}
现在,我想知道哪些参数应该接受updateChild
。在上面的示例中,仅需要childID
。您认为也可以要求提供parentID
的用户吗?
updateChild(childID:ID!, parentID: ID!, in: ChildInput)
[我使用here中的建议,即每个突变只有一个输入对象参数,该参数合并了所有必要的字段,而不是将这些字段拼合为多种不同的输入参数。另外,我倾向于为每个突变设置一个输入对象(Github突变API也使用这种设计风格)
因此,对于updateChild
突变,我将具有以下输入类型:
mutations {
updateChild(input: UpdateChildInput): Child
}
input UpdateChildInput {
childId : ID!
parentId: ID
name:String
}
要包含在UpdateChildInput
中的字段取决于您的API要求。包括您的API需要支持的字段。因此,如果您的API允许用户更改孩子的父母,则必须将其包含在输入中。
请注意,parentID和名称是可选的,这意味着如果用户未指定它们,它们将不会被更新。