GraphQL playground で "Invalid or incomplete introspection result"


GraphQLでSchemaを定義し、いざplaygroundで実行しようとしたら、以下のエラーに見舞われました。

エラー文はこんな感じ

{
  "errors": [
    {
      "message": "Invalid or incomplete introspection result. Ensure that you are passing \"data\" property of introspection response and no \"errors\" was returned alongside: { __schema: null }.",
      "stack": "Error: Invalid or incomplete introspection result. Ensure that you are passing \"data\" property of introspection response and no \"errors\" was returned alongside: { __schema: null }.\n    at r (https://cdn.jsdelivr.net/npm/[email protected]/graphiql.min.js:1:25665)\n    at sr (https://cdn.jsdelivr.net/npm/[email protected]/graphiql.min.js:1:323487)\n    at https://cdn.jsdelivr.net/npm/[email protected]/graphiql.min.js:1:542969"
    }
  ]
}

環境は以下の通り

  • golang 1.18
  • github.com/99designs/gqlgen v0.17.2
  • github.com/vektah/gqlparser/v2 v2.4.1

結論

Query を定義しないと、上記のようなエラーが出るようです。

https://github.com/99designs/gqlgen/issues/562

Before

# schema.graphqls
type Todo {
  id: ID!
  text: String!
  subtext: String
  done: Boolean!
  user: User!
}

type User {
  id: ID!
  name: String!
}

input NewTodo {
  text: String!
  subtext: String
  userId: String!
}

# Mutationのみ定義した
type Mutation {
  createTodo(input: NewTodo!): Todo!
}

After

Queryを追加してあげて解決!

# schema.graphqls
type Todo {
  id: ID!
  text: String!
  subtext: String
  done: Boolean!
  user: User!
}

type User {
  id: ID!
  name: String!
}

input NewTodo {
  text: String!
  subtext: String
  userId: String!
}

# ##### HERE ##### #
type Query {
  todos: [Todo!]!
}
# ################ #

type Mutation {
  createTodo(input: NewTodo!): Todo!
}

gqlgen でエラーが出ないので、全く気がつかずにハマりました。

ちなみに、Queryが必要ないからといって空objectにすると怒られます。

# これは×
type Query {
}

同じ悲劇が起きませんように...