不从GraphqL变异返回数据

时间:2017-06-24 13:45:00

标签: graphql

我有几个Graphql查询和突变,现在我试图实现 delete 变异而不返回任何数据:

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

但是,似乎需要删除操作的返回值。有没有办法执行"空" graphql中的响应?我想避免像可能的情况那样返回布尔值或状态标志。

我不确定Graphql删除操作的最佳做​​法是什么

3 个答案:

答案 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软件包,但是如果您不想添加另一个依赖项,只需复制此代码即可。

1。在架构中定义Void标量

# file: ./schema.gql

scalar Void

2。实施解析器

// 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

3。将解析器添加到ApolloServer

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
    },
    
})

4。在架构中使用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