Comments (3)
Sending a json with a query key is perfectly normal
- Which backend are you using?
- Are you sure you used a GraphQL endpoint url?
from gql.
I'm using python as my backend and my url is using a graphql endpoint. it isi using shopify graphql endpoint.
from gql.
Alright,
It seems the problem is that Shopify does not provide a standard GraphQL HTTP interface.
The documentation for the GraphQL API is here
And a GraphiQl interface of a demo store is available at https://shopify.dev/graphiql/admin-graphiql
Reverse engineering (with chrome dev-tools, copy as curl) what is sent on this graphiql interface shows a request looking like this:
curl 'https://shopify.dev/admin-graphql-proxy' \
-H 'authority: shopify.dev' \
-H 'accept: */*' \
-H 'accept-language: en-US,en;q=0.9,la;q=0.8,fr;q=0.7,nl;q=0.6' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-H 'cookie: shopify_experiment_assignments=%5B%5D; _shopify_dev_session=REDACTED' \
-H 'origin: https://shopify.dev' \
-H 'pragma: no-cache' \
-H 'referer: https://shopify.dev/graphiql/admin-graphiql' \
-H 'sec-ch-ua: "Not(A:Brand";v="24", "Chromium";v="122"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "Linux"' \
-H 'sec-fetch-dest: empty' \
-H 'sec-fetch-mode: cors' \
-H 'sec-fetch-site: same-origin' \
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36' \
-H 'x-csrf-token: REDACTED' \
--data-raw '{"graphQLParams":{"query":"{\n shop {\n name\n }\n}","variables":null},"version":"2024-01"}'
What is strange in that request is that you can see a graphQLParams
key in the request instead of directly the query key. This does not seem to be documented in the Shopify GraphQL documentation.
I was able to execute a query using gql using a modified transport for Shopify which will modify the request to put it inside the GraphQLParams
key.
The following code should be executable:
import logging
logging.basicConfig(level=logging.INFO)
from gql import gql, Client
from gql.transport.httpx import HTTPXTransport
class ShopifyTransport(HTTPXTransport):
def _prepare_request(
self,
document,
variable_values = None,
operation_name = None,
extra_args = None,
upload_files = False,
):
payload = super()._prepare_request(
document=document,
variable_values=variable_values,
operation_name=operation_name,
extra_args=extra_args,
upload_files=upload_files,
)
shopify_payload = {
"graphQLParams": payload["json"],
"version": "2024-01",
}
return {"json": shopify_payload}
transport = ShopifyTransport(url="https://shopify.dev/admin-graphql-proxy")
client = Client(transport=transport)
query = gql("""
{
shop {
name
}
}
""")
result = client.execute(query)
print (f"result = {result}")
You could try using that ShopifyTransport
above on your own shop to see if it solves your problem.
from gql.
Related Issues (20)
- DSL Question HOT 5
- `KeyError` when parsing result using fragment and nested field HOT 3
- 3.5 Beta: overlapping_fields_can_be_merged: directives are None HOT 9
- DSL, Fragments and unions HOT 4
- gql should have a websockets-client transport HOT 4
- Unable to print schema with gql and error is an SSL error HOT 1
- Cannot use gql with httpx transport and trio HOT 3
- Tests fail out of the box. HOT 2
- Any best practice using async gql with FastAPI? HOT 2
- DSL how to select fields which are Python reserved keywords HOT 2
- [Feature] Support Subscriptions HTTP Multipart Protocol HOT 6
- Handling decimals with longer than 6 scale? HOT 7
- Timeout error during execution of mutation when no of async tasks is above 5000 + HOT 1
- Request/Response payloads logged at level INFO HOT 5
- requests_toolbelt isn't listed as an optional dependency although required for logging changes HOT 1
- Add retry logic to httpx Transport HOT 4
- retry_execute can not handle TransportQueryError HOT 1
- Error when using gqc client under windows HOT 6
- Add change log to repository main directory? HOT 2
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 gql.