Skip to content

0xtlt/shopify_api

Repository files navigation

shopify_api

crates.io Documentation MIT/Apache-2 licensed CI Issues

An ergonomic, Shopify API Client for Rust.

  • GraphQL API support with automatic data deserialization
  • Changelog

Example

This asynchronous example uses Tokio and enables some optional features, so your Cargo.toml could look like this:

[dependencies]
shopify_api = "0.8"
tokio = { version = "1", features = ["full"] }

And then the code:

use shopify_api::*;
use shopify_api::utils::ReadJsonTreeSteps;
use serde::{Deserialize};

#[derive(Deserialize)]
struct Shop {
  name: String,
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
  let shopify = Shopify::new("hello", "world", String::from("2024-04"), None);

  let graphql_query = r#"
    query {
      shop {
      name
     }
  }"#;

  let variables = serde_json::json!({});
  let json_finder = vec![ReadJsonTreeSteps::Key("data"), ReadJsonTreeSteps::Key("shop")];

  let shop: Shop = shopify.graphql_query(graphql_query, &variables, &json_finder).await.unwrap();
  Ok(())
}

Or with the new GraphQl Client!

[dependencies]
shopify_api = "0.8"
tokio = { version = "1", features = ["full"] }
graphql_client = "0.14.0"
query GetShop {
  shop {
    name
  }
}
use shopify_api::*;
use graphql_client::GraphQLQuery;

#[derive(GraphQLQuery)]
#[graphql(
    schema_path = "./graphql.schema.json",
    query_path = "graphql/getShop.graphql",
    response_derives = "Debug"
)]
struct GetShop;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
  let shopify = Shopify::new("hello", "world", String::from("2024-04"), None);

  let shop_info = connector
        .shopify
        .post_graphql::<GetShop>(get_shop::Variables {})
        .await;

  Ok(())
}

Download the graphql schema

You can download one from this repository

Or download it from the Shopify Graphql API with the following command

Warning

Sometimes you'll get an error with the GraphQLQuery derive caused my a missing struct, most of the time, you can fix it by adding the missing struct by importing it from the types import or you can create a new struct with the same name as the missing one, and the derive will work.

License

Licensed under MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)