嵌套突变有多糟糕?

Gui*_*adi 4 graphql

我知道它会被视为反模式,但为什么呢?

mutation {
  createUser(name: "john doe") {
    addToTeam(teamID: "123") {
      name,
      id
    },

    id
  }
}
Run Code Online (Sandbox Code Playgroud)

它不比两个HTTP调用更方便吗?

mutation {
  createUser(name: "john doe") {
    id, # we store the ID
  }
}

mutation {
  addToTeam(userID: id, teamID: "123") {
    name,
    id,
  }
}
Run Code Online (Sandbox Code Playgroud)

mar*_*ani 9

如果你Team和之间有关系User,你可以公开这个API:

创建用户,与现有团队相关

mutation {
  createUser(name: "john doe", teamId: "team-id") {
    id
    team {
      id
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

创建新用户和新团队

mutation {
  createUser(name: "john doe", team: {name: "New team"}) {    
    id
    team {
      id
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这正是Graphcool API处理此问题的方式,如本博客文章所示.您可以在文档中找到另一个示例.