Skip to content

Latest commit

 

History

History
121 lines (100 loc) · 3.44 KB

graphql.md

File metadata and controls

121 lines (100 loc) · 3.44 KB

Make a GraphQL API call

Once you have a session after completing oauth, you can make GraphQL queries to the Admin API with ShopifyAPI::Clients::Graphql::Admin

Below is an example

# load the current session with SessionUtils.load_current_session
session = ShopifyAPI::Utils::SessionUtils.load_current_session(auth_header: <auth-header>, cookies: <cookies>, is_online: <true|false>)

# initalize the client
client = ShopifyAPI::Clients::Graphql::Admin.new(session: session)

# make the GraphQL query string
query =<<~QUERY
  {
    products(first: 10) {
      edges {
        cursor
        node {
          id
          title
          onlineStoreUrl
        }
      }
    }
  }
QUERY

response = client.query(query: query)
# do something with the response data

You can also make GraphQL calls that take in variables

client = ShopifyAPI::Clients::Graphql::Admin.new(session: session)

query = <<~QUERY
  query testQueryWithVariables($first: Int!){
    products(first: $first) {
      edges {
        cursor
        node {
          id
          title
          onlineStoreUrl
        }
      }
    }
  }
QUERY
variables = {
  first: 3
}

response = client.query(query: query, variables: variables)

Here is an example of how you might use fragments as part of the client

client = ShopifyAPI::Clients::Graphql::Admin.new(session: session)
# define the fragment as part of the query
query = <<~QUERY
  fragment ProductStuff on Product {
    id
    title
    description
    onlineStoreUrl
  }
  query testQueryWithVariables($first: Int){
    products(first: $first) {
      edges {
        cursor
        node {
          ...ProductStuff
        }
      }
    }
  }
QUERY
variables = {
  first: 3
}
response = client.query(query: query, variables: variables)
# do something with the reponse

By default, the client uses the API version configured in ShopifyAPI. To use a different API version, set the optional api_version parameter. To experiment with prerelease API features, use "unstable" for the API version.

client = ShopifyAPI::Clients::Graphql::Admin.new(session: session, api_version: "unstable")

Want to make calls to the Storefront API? Click here

Proxy a GraphQL Query

If you would like to give your front end the ability to make authenticated graphql queries to the Shopify Admin API, the shopify_api gem makes proxying a graphql request easy! The gem provides a utility function which will accept the raw request body (a GraphQL query), the headers, and the cookies (optional). It will add authentication to the request, proxy it to the Shopify Admin API, and return a ShopifyAPI::Clients::HttpResponse. An example utilization of this in Rails is shown below:

def proxy
  begin
    response = ShopifyAPI::Utils::GraphqlProxy.proxy_query(
      headers: request.headers.to_h,
      body: request.raw_post,
      cookies: request.cookies.to_h
    )

    render json: response.body, status: response.code
  rescue ShopifyAPI::Errors::InvalidGraphqlRequestError
    # Handle bad request
  rescue ShopifyAPI::Errors::SessionNotFoundError
    # Handle no session found
  end
end

Note: GraphQL proxying is only supported for online sessions for non-private apps, the utility will raise a ShopifyAPI::Errors::SessionNotFoundError if there are no existing online tokens for the provided credentials, and a ShopifyAPI::Errors::PrivateAppError if called from a private app.