Comments (5)
@mwilli31 I've sent PR #23 which should fix this issue. Could you give it a try and confirm it fixes it for you?
from graphql.
Hi, thanks for reporting.
Minor bug where the response from the server is not compliant with the Query Struct and provides valid graphql Errors
I'd like to better understand when this can happen (and why):
-
Can it happen with a valid GraphQL server, or only if the GraphQL server sends an response that isn't correct according to the GraphQL spec?
-
Do you know what are the conditions for this to happen?
-
How can I reproduce it?
Thanks.
from graphql.
If an error was encountered before execution begins, the data entry should not be present in the result.
If an error was encountered during the execution that prevented a valid response, the data entry in the response should be null.
This is happening with a valid GraphQL server and fails while in compliance with the above spec. Essentially, the has to do with the UnmarshalGraphQL function:
func UnmarshalGraphQL(data []byte, v interface{}) error {
dec := json.NewDecoder(bytes.NewReader(data))
dec.UseNumber()
err := (&decoder{tokenizer: dec}).Decode(v)
if err != nil {
//ERROR IS THROWN HERE HERE
return err
}
To reproduce, send a query that has an error that returns a NULL entity back (like an ID lookup that has no resource found).
Example return from GraphiQL:
{
"data": {
"clinicalCodeType": null
},
"errors": [
{
"message": "Resource Not Found",
"path": [
"clinicalCodeType"
]
}
]
}
Also, it fails when the query doesn't match a valid query and fails before execution begins on the server (ie. missing required fields).
Example return from Graphiql:
{
"errors": [
{
"message": "Field \"clinicalCodeType\" argument \"id\" of type \"String!\" is required but not provided.",
"locations": [
{
"line": 29,
"column": 3
}
]
}
]
}
Tracing it into the UnmarshalGraphQL function, it fails because the "data" element returned by the GraphQL Server is either NULL or non-existent and thus its trying to unmarshal an object that doesn't exist and throws an error.
from graphql.
Thanks a lot for the information, it's very helpful.
I will work on a fix.
I suspect the right solution is that UnmarshalGraphQL
should not return an error on that input. It should populate partial results (if any) and return nil error.
Just checking, but are you using the latest version of graphql
? I remember fixing an issue related to this somewhat recently (edit: see 8d3d310).
from graphql.
@mwilli31 Can you share the GraphQL query and/or the Go code to execute that query that you used? I can't reproduce the problem yet.
Edit: Okay, I managed to reproduce when "data" field is completely absent from the response.
from graphql.
Related Issues (20)
- query with circular dependencies leads to infinite recursion HOT 1
- Any interest in native go type support? HOT 1
- I want to add where condition in the query structure, how to do this
- How to define struct HOT 3
- Query and Mutation methods ignore query content when it's wrapped in an interface HOT 3
- Query for Github Projects in an organization HOT 2
- How to deal with integer overflow when using variables HOT 2
- "Variable \\\"$evar\\\" is never used. HOT 2
- [Feature reqeust] Add possiblity to load query from string / .gql file HOT 4
- Question: How to implement an enumeration type HOT 1
- Question: Example of doing pagination (especially on nested resources that are paginated) HOT 6
- Nested struct tag not applied to query HOT 2
- Using alternative rest clients
- OAuth2 Bearer Token with Customer HttpClient HOT 1
- Please make "constructQuery" exported HOT 3
- Allow building mutations from maps instead of structs
- I love this library but it seems unmaintained? HOT 1
- FaunaDB graphql _id defined as _ID not exported HOT 4
- Message: x-hasura-admin-secret but not found,
- Return more verbose error to the caller HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from graphql.