如何在GraphQL中使用可选参数实现突变?

如何在GraphQL中使用可选参数实现突变?,graphql,graphql-js,prisma-graphql,Graphql,Graphql Js,Prisma Graphql,我正在学习graphql,并阅读了教程,对updateLink变体的实现很感兴趣,如下所示 type Query { # Fetch a single link by its `id` link(id: ID!): Link } type Mutation { # Update a link updateLink(id: ID!, url: String, description: String): Link } 我问这个问题的原因是,我所看到的每一个其他变异实现都只使用非可

我正在学习graphql,并阅读了教程,对updateLink变体的实现很感兴趣,如下所示

type Query {
  # Fetch a single link by its `id`
  link(id: ID!): Link
}

type Mutation {
  # Update a link
  updateLink(id: ID!, url: String, description: String): Link
}
我问这个问题的原因是,我所看到的每一个其他变异实现都只使用非可选参数。我很好奇是否有一个社区一致同意的模式,用于从给定上下文中提取和应用提供的非空参数(url、描述),并将它们应用于相关的数据库记录

我已经考虑过如下检查每个变量是否为null,但是与Graphql提供的其他“魔力”和简单性相比,这种方法看起来比我预期的要混乱得多

        updateLink(root, args, context) {
            if (args.url == null && args.description == null){
                return null
            } else if (args.url == null) {
                return context.prisma.updateLink({
                    id: args.id,
                    description: args.description
                })
            } else {
                return context.prisma.updateLink({
                    id: args.id,
                    url: args.url
                })
            }
        }
请让我知道你是否找到了一个更干净的方法来提取和应用可选参数(url,描述)

我的另一个考虑是做两个单独的更新突变,如下所示

type Query {
  # Fetch a single link by its `id`
  link(id: ID!): Link
}

type Mutation {
  # Update a link
  updateLinkURL(id: ID!, url: String!): Link
  updateLinkDescription(id: ID!, description: String!): Link
}
这里的想法是使用有限的参数和声明性的突变名称,可以强制参数为非空。这里的主要问题是,对于具有许多列的表,可以有许多更新方法,这也会开始看起来很混乱

仅供参考,我使用prisma作为我的ORM