Skip to content

errors do not conform to the GraphQL specification  #221

@oliverpool

Description

@oliverpool

Describe the bug

According to the end of 7.1.2 Errors, non-standard fields should be put under extensions in case of error.

Currently when returning an error, this extension behaves like the counter example and sets code, fields, short_message and vars directly:

{
  "data": null,
  "errors": [
    {
      "code": "forbidden",
      "fields": [],
      "locations": [{ "column": 3, "line": 2 }],
      "message": "forbidden",
      "path": ["some_path"],
      "short_message": "forbidden",
      "vars": {}
    }
  ]
}

To Reproduce
Setup a GraphQL server and perform a request which triggers an authentication failure.

Expected behavior
The non-standard fields should be put under an extensions key:

{
  "data": null,
  "errors": [
    {
      "locations": [{ "column": 3, "line": 2 }],
      "message": "forbidden",
      "path": ["some_path"],
      "extensions": {
        "code": "forbidden",
        "fields": [],
        "short_message": "forbidden",
        "vars": {}
      }
    }
  ]
}

To not break backward compatibility while providing support for spec-compliant clients, the fields could be duplicated in the meantime:

{
  "data": null,
  "errors": [
    {
      "locations": [{ "column": 3, "line": 2 }],
      "message": "forbidden",
      "path": ["some_path"],

      "code": "forbidden",
      "fields": [],
      "short_message": "forbidden",
      "vars": {}
      "extensions": {
        "code": "forbidden",
        "fields": [],
        "short_message": "forbidden",
        "vars": {}
      }
    }
  ]
}

Additional context
I am querying the GraphQL server with a Go client which discards non-standard keys not put under extensions: https://pkg.go.dev/github.com/vektah/gqlparser/[email protected]/gqlerror#Error

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    Status

    Someday

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions