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

时间:2019-08-29 05:42:09

标签: graphql graphql-js prisma-graphql

我正在学习有关graphql的知识,并通过了https://www.howtographql.com/graphql-js/3-a-simple-mutation/教程,并对以下所示的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
                })
            }
        }

如果您找到了一种更简洁的方法来提取和应用可选参数(网址,说明),请告诉我。

我的另一个考虑是如下进行两个单独的更新突变。

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
}

这里的想法是有限的参数和声明性的突变名称,可能会强制参数为非null。这里的主要问题是,对于具有很多列的表,可以有许多更新方法,这也会看起来很杂乱。

仅供参考,我正在使用pyramida作为我的ORM。

0 个答案:

没有答案