我有几个Graphql查询和突变,现在我试图实现 delete 变异而不返回任何数据:
type Mutation{
addElement(element:ElementData): ID
removeElement(id:ID): ¿?
}
但是,似乎需要删除操作的返回值。有没有办法执行"空" graphql中的响应?我想避免像可能的情况那样返回布尔值或状态标志。
我不确定Graphql删除操作的最佳做法是什么
答案 0 :(得分:19)
在issue之后,您无法返回任何内容。
您可以定义一个可以为空的返回类型,例如
type Mutation {
addElement(element: ElementData): ID
removeElement(id: ID): Boolean
}

但我建议你返回已删除元素的id。
因为如果你想使用缓存商店,你必须在删除突变已经过正面时更新商店。
答案 1 :(得分:8)
scalar
注意:具有
背道而驰void
-突变结果的设计与"GQL best practices"
该示例是为NodeJS Apollo Framework编写的,但是很容易转换您的语言/框架的实现
我非常确定:有一个名为graphql-void
的NPM软件包,但是如果您不想添加另一个依赖项,只需复制此代码即可。
Void
标量# file: ./schema.gql
scalar Void
// file ./scalar-void.js
import { GraphQLScalarType } from 'graphql'
const Void = new GraphQLScalarType({
name: 'Void',
description: 'Represents NULL values',
serialize() {
return null
},
parseValue() {
return null
},
parseLiteral() {
return null
}
})
export Void
将Void
解析器添加到Apollo Server实例的选项中:
# file: ./server.js
import { ApolloServer } from 'apollo-server-express'
import { Void } from './scalar-void'
const server = new ApolloServer({
typeDefs, // use your schema
resolvers: {
Void: Void,
// ... your resolvers
},
})
Void
进行突变 最后,在您的架构中使用新的scalar
:
# file: ./schema.gql
type Mutation{
addElement(element: ElementData): ID
removeElement(id: ID): Void
}
答案 2 :(得分:1)
如果您使用TypeScript和graphql-codegen
:
在GraphQL模式中:
scalar Void
type Mutation {
removeElement(id: ID): Void
}
在解析器的代码生成配置中:
config:
scalars:
Void: "void"
使用此配置,TypeScript将确保removeElement
突变解析器不返回任何内容。突变的返回值在GraphQL端始终为null
。