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 和名称是可选的,这意味着如果用户不指定它们,它们将不会被更新。