我正在学习有关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。