【问题标题】:Shopify graphQL queryShopify graphQL 查询
【发布时间】:2019-04-06 01:56:29
【问题描述】:

我看不到如何为 shopify 格式化这个石墨烯查询。我需要在 Django 中用石墨烯复制这个 curl 查询:

    curl -X POST \
"https://<shop>.myshopify.com/api/graphql" \
-H "Content-Type: application/graphql" \
-H "X-Shopify-Storefront-Access-Token: <storefront-access-token>" \
-d '
{
  shop {
    collections(first: 5) {
      edges {
        node {
          id
          handle
        }
      }
      pageInfo {
        hasNextPage
      }
    }
  }
}
'

到目前为止我有:

access_token = 'some_token'
    headers = (
        { "Content-Type": "application/graphql" },
        { "X-Shopify-Storefront-Access-Token": access_token},
    )
    schema = graphene.Schema(query=Query)
    print(schema)
    result = schema.execute('{
        catsinuniform {
            collections(first: 5) {
              edges {
                node {
                  id
                  handle
                }
              }
              pageInfo {
                hasNextPage
              }
            }
        }'')
    print(result.data['catsinuniform'])

这种语法对于石墨烯来说是错误的,但我不明白它应该是什么样子?一旦我获得了正确格式的数据,我就可以发布请求以从 shopify storefrontapi 获取我想要的信息

【问题讨论】:

  • 您是尝试创建graphql 请求,还是使用石墨烯复制shopify 上的数据结构?
  • 我需要创建一个 graphql 请求,以便我可以访问 shopify 店面 api。如果我可以使用 python 发出请求,这个页面help.shopify.com/en/api/custom-storefronts/storefront-api/… 包含我需要的所有信息

标签: django graphql shopify-app


【解决方案1】:

从 Shopify Python API 5.1.0 版开始,支持使用 Graphql 查询 Shopify Admin API:

client = shopify.GraphQL()
query = '''
    {
        shop {
            name
            id
        }
    }
'''
result = client.execute(query)

Shopify Python API Graphql Docs

【讨论】:

    【解决方案2】:

    Graphene 是 Python 的 GraphQL 规范的实现,用于创建和执行您自己的 GraphQL 模式。它不是向现有 GraphQL 服务器发出请求的 GraphQL 客户端。您可以使用任何常规 HTTP 库(例如 requests)调用 Shopify API,也可以使用 gql 之类的东西。一个简单的例子:

    import requests
    
    access_token = <YOUR TOKEN>
    headers = {
        "Content-Type": "application/graphql",
        "X-Shopify-Storefront-Access-Token": access_token
    }
    
    query = """
    {
      shop {
        collections(first: 5) {
          edges {
            node {
              id
              handle
            }
          }
          pageInfo {
            hasNextPage
          }
        }
      }
    }
    """
    
    request = requests.post('https://<YOUR SHOP>.myshopify.com/api/graphql', json={'query': query}, headers=headers)
    result = request.json()
    

    【讨论】:

    • 这看起来不错,但我仍然收到错误:{'errors': [{'message': 'Parse error on "query" (STRING) at [1, 2]', 'locations ': [{'line': 1, 'column': 2}]}]}
    • 尝试将Content-Type 标头更改为application/json
    • 只是摆脱内容类型似乎效果最好 - 然后我使用 ['data']['shop']['collections'] 浏览 json 的子字典 - 但这确实有效- 所要做的就是摆脱内容类型
    猜你喜欢
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 2022-07-05
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多