Skip to content

core: return PersistedQueryNotSupported for Apollo Persisted Queries#982

Merged
jbaxleyiii merged 1 commit into
masterfrom
glasser/persistedquerynotsupported
Apr 24, 2018
Merged

core: return PersistedQueryNotSupported for Apollo Persisted Queries#982
jbaxleyiii merged 1 commit into
masterfrom
glasser/persistedquerynotsupported

Conversation

@glasser

@glasser glasser commented Apr 23, 2018

Copy link
Copy Markdown
Member

Apollo Persisted Queries is a standard for sending queries as short hashes
instead of full strings, designed to work well with GET requests. It is
implemented by servers including the Apollo Engine Proxy, and by the
apollo-link-persisted-query client.

A common configuration is to set up persisted queries on production servers but
not in development. It is still convenient to leave apollo-link-persisted-query
always on, though. While apollo-link-persisted-query can detect that servers
don't support PQs, it works better if the server actually says it doesn't
support the PQ, instead of trying to process a request without a query and
potentially printing a confusing stack trace. This commit makes apollo-server
directly return PersistedQueryNotSupported instead of allowing confusing stack
traces to occur.

Apollo Persisted Queries is a standard for sending queries as short hashes
instead of full strings, designed to work well with GET requests. It is
implemented by servers including the Apollo Engine Proxy, and by the
apollo-link-persisted-query client.

A common configuration is to set up persisted queries on production servers but
not in development. It is still convenient to leave apollo-link-persisted-query
always on, though. While apollo-link-persisted-query can detect that servers
don't support PQs, it works better if the server actually says it doesn't
support the PQ, instead of trying to process a request without a query and
potentially printing a confusing stack trace.  This commit makes apollo-server
directly return PersistedQueryNotSupported instead of allowing confusing stack
traces to occur.
@glasser glasser requested a review from jbaxleyiii April 23, 2018 23:02
@jbaxleyiii jbaxleyiii merged commit e2df79d into master Apr 24, 2018
@jbaxleyiii jbaxleyiii deleted the glasser/persistedquerynotsupported branch April 24, 2018 10:29
@glasser

glasser commented Apr 24, 2018

Copy link
Copy Markdown
Member Author

Thanks!

In the future I prefer to merge my own PRs on repos where I have permissions, as l'esprit de l'escalier often strikes me. (I was at least intending to add a CHANGELOG note here.)

@glasser

glasser commented Apr 24, 2018

Copy link
Copy Markdown
Member Author

This has been published as apollo-server-* 1.3.6.

@billnbell

billnbell commented Apr 25, 2018

Copy link
Copy Markdown

OK When calling to get a persisted query I get an error when Graphql does not have Engine defined.

1:

http://localhost:4001/graphql?query={__typename}&extensions={%22persistedQuery%22:{%22version%22:1,%22sha256Hash%22:%22ecf4edb46db40b5132295c0291d62fb65d6759a9eedfa4d5d612dd5ec54a6b38%22}}

Then:

http://localhost:4001/graphql?extensions={%22persistedQuery%22:{%22version%22:1,%22sha256Hash%22:%22ecf4edb46db40b5132295c0291d62fb65d6759a9eedfa4d5d612dd5ec54a6b38%22}}

{
errors: [
{
message: "Cannot read property 'definitions' of undefined"
}
]
}

Stack dump is:

graphql_1 | TypeError: Cannot read property 'definitions' of undefined
graphql_1 | at Object.getOperationAST (/usr/src/app/node_modules/graphql/utilities/getOperationAST.js:17:35)
graphql_1 | at isQueryOperation (/usr/src/app/node_modules/apollo-server-core/src/runHttpQuery.ts:26:24)
graphql_1 | at /usr/src/app/node_modules/apollo-server-core/src/runHttpQuery.ts:86:16
graphql_1 | at Array.map ()
graphql_1 | at Object. (/usr/src/app/node_modules/apollo-server-core/src/runHttpQuery.ts:77:59)
graphql_1 | at step (/usr/src/app/node_modules/apollo-server-core/dist/runHttpQuery.js:42:23)
graphql_1 | at Object.next (/usr/src/app/node_modules/apollo-server-core/dist/runHttpQuery.js:23:53)
graphql_1 | at fulfilled (/usr/src/app/node_modules/apollo-server-core/dist/runHttpQuery.js:14:58)
graphql_1 | at propagateAslWrapper (/usr/src/app/node_modules/async-listener/index.js:478:23)
graphql_1 | at /usr/src/app/node_modules/async-listener/glue.js:188:31

It should probably say:

message: "Graphql Apollo Engine APQ is not enabled"

@glasser

glasser commented Apr 25, 2018

Copy link
Copy Markdown
Member Author

You are definitely running apollo-server-core@1.3.6?

@billnbell

Copy link
Copy Markdown

I am running

"apollo-engine": "^1.1.0",
"apollo-server-express": "^1.3.6",

@glasser

glasser commented Apr 27, 2018

Copy link
Copy Markdown
Member Author

But what version of apollo-server-core (according to, say, npm ls | grep apollo-server-core)?

@billnbell

Copy link
Copy Markdown

npm ls | grep apollo-server-core
│ ├─┬ apollo-server-core@1.3.6

@glasser

glasser commented Apr 27, 2018

Copy link
Copy Markdown
Member Author

That's strange — this PR really should fix that. Can you share a small reproduction git repo that shows this happening?

@github-actions github-actions Bot locked as resolved and limited conversation to collaborators Apr 23, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants