考虑到突变的输入类型,如何在 GraphQL 中设计模式?

How to design schema in GraphQL considering input types for mutation?

这个模式看起来正确吗?

type User {
    id : ID!
    username : String!
    email : String!
    name : String!
}

input UserInput {
    username : String!
    email : String!
    name : String!
}

mutation createNewUser($usr: UserInput!) {
  createUser(user: $usr)
}

由于用户的内部 ID 将在用户创建时分配,如果在此模式中有单独的 typeinput,或者 User 可能是做了 input?所以该模式看起来像这样

input User {
    id: ID
    username : String!
    email : String!
    name : String!
}

mutation createNewUser($usr: User!) {
  createUser(user: $usr) : User
}

您的第一种方法是正确的。 id 字段不能为 null (id: ID!) 并且当您需要创建用户时它不能有值,因此您需要为其设置另一个输入类型。

mattdionis also pointed out, there's a very similiar sample in the docs.

您的架构应该是

const typeDefinitions = `
type User {
    id : ID!
    username : String!
    email : String!
    name : String!
}

input UserInput {
    username : String!
    email : String!
    name : String!
}

type Mutation {
  createUser(user: UserInput) User
}

schema {
  mutation:Mutation
}
`;

export default [typeDefinitions];