使用GraphQL变异时是否可能不返回任何数据?

使用GraphQL变异时是否可能不返回任何数据?,graphql,Graphql,我有几个GraphQL查询和突变,现在我尝试在不返回任何数据的情况下实现删除突变: type Mutation{ addElement(element: ElementData): ID removeElement(id: ID): ¿? } 但是,删除操作似乎需要有一个返回值。有没有办法在GraphQL中执行“空”响应?如果可能的话,我希望避免像返回布尔值或状态标志这样的事情 我不确定GraphQL删除操作的最佳实践是什么。根据这一点,您不能返

我有几个GraphQL查询和突变,现在我尝试在不返回任何数据的情况下实现删除突变:

    type Mutation{
        addElement(element: ElementData): ID
        removeElement(id: ID): ¿?
    }
但是,删除操作似乎需要有一个返回值。有没有办法在GraphQL中执行“空”响应?如果可能的话,我希望避免像返回布尔值或状态标志这样的事情

我不确定GraphQL删除操作的最佳实践是什么。

根据这一点,您不能返回任何内容

您可以定义可为null的返回类型,例如

型突变{
addElement(元素:ElementData):ID
removeElement(id:id):布尔值
}
带有自定义标量的解决方案 注意:带有
无效的设计
-突变的结果与

这个示例是为NodeJS Apollo框架编写的,但是为您的语言/框架转换实现非常容易

我很确定:有一个名为
graphqloid
的NPM包,但是如果您不想添加另一个依赖项,只需复制此代码即可

1.在模式中定义
Void
-标量 2.机具分解器
//文件。/scalar-void.js
从“graphql”导入{GraphQLScalarType}
const Void=new GraphQLScalarType({
名称:'无效',
description:'表示空值',
序列化(){
返回空
},
parseValue(){
返回空
},
parseLiteral(){
返回空
}
})
导出无效
3.将解析程序添加到服务器 将
Void
解析器添加到Apollo Server实例的选项中:

#文件:./server.js
从“apollo server express”导入{apollo server}
从“./scalar Void”导入{Void}
const server=新服务器({
typeDefs,//使用您的模式
解析程序:{
无效:无效,
//…您的解析器
},
})
4.对模式中的突变使用
Void
最后,在模式中使用新的
标量

# file: ./schema.gql

type Mutation{
    addElement(element: ElementData): ID
    removeElement(id: ID): Void
}

如果使用TypeScript和
graphql-codegen

  • 在GraphQL模式中:

    scalar Void
    
    type Mutation {
      removeElement(id: ID): Void
    }
    
  • 在解析程序的codegen配置中:

    config:
    标量:
    无效:“无效”
    

使用此配置类型脚本将确保从
removelement
变异解析程序中不返回任何内容。在GraphQL端,突变的返回值总是
null

如果删除,最好按照建议返回产品ID(因为它是GraphQL,甚至可能是整个产品)。然而,有些操作确实不需要数据。对于这些情况,我们可以定义
类型Void
,然后执行
某些操作(输入:InputObject!):Void
,以清楚地表明意图。您认为链接的“GQL最佳实践”的哪一部分是说返回Void的突变是不好的实践?我找不到任何这样的建议。
scalar Void

type Mutation {
  removeElement(id: ID): Void
}