GraphQL API-嵌套对象的变异

问题描述 投票:0回答:1

假设我有两种通过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)
graphql api-design
1个回答
0
投票

[我使用here中的建议,即每个突变只有一个输入对象参数,该参数合并了所有必要的字段,而不是将这些字段拼合为多种不同的输入参数。另外,我倾向于为每个突变设置一个输入对象(Github突变API也使用这种设计风格)

因此,对于updateChild突变,我将具有以下输入类型:

mutations {
    updateChild(input: UpdateChildInput): Child
} 

input UpdateChildInput {
    childId : ID!
    parentId: ID
    name:String 
}

要包含在UpdateChildInput中的字段取决于您的API要求。包括您的API需要支持的字段。因此,如果您的API允许用户更改孩子的父母,则必须将其包含在输入中。

请注意,parentID和名称是可选的,这意味着如果用户未指定它们,它们将不会被更新。

© www.soinside.com 2019 - 2024. All rights reserved.