GraphQL API - 嵌套对象的突变
GraphQL API - mutations of nested objects
假设我有 2 种通过 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 的建议,即每个突变只有一个输入 object 参数,它合并了所有必要的字段,而不是将这些字段展平为许多不同的输入参数。此外,我倾向于为每个突变输入一个 object(Github 突变 API 也使用这种设计风格)
所以对于 updateChild
突变,我会有以下输入类型:
mutations {
updateChild(input: UpdateChildInput): Child
}
input UpdateChildInput {
childId : ID!
parentId: ID
name:String
}
UpdateChildInput
中包含哪些字段取决于您的 API 要求。包括您的 API 需要支持的字段。因此,如果您的 API 允许用户更改 child 的 parent ,则您必须将其包含在输入中。
请注意,parentID 和名称是可选的,这意味着如果用户不指定它们,它们将不会被更新。
假设我有 2 种通过 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 的建议,即每个突变只有一个输入 object 参数,它合并了所有必要的字段,而不是将这些字段展平为许多不同的输入参数。此外,我倾向于为每个突变输入一个 object(Github 突变 API 也使用这种设计风格)
所以对于 updateChild
突变,我会有以下输入类型:
mutations {
updateChild(input: UpdateChildInput): Child
}
input UpdateChildInput {
childId : ID!
parentId: ID
name:String
}
UpdateChildInput
中包含哪些字段取决于您的 API 要求。包括您的 API 需要支持的字段。因此,如果您的 API 允许用户更改 child 的 parent ,则您必须将其包含在输入中。
请注意,parentID 和名称是可选的,这意味着如果用户不指定它们,它们将不会被更新。