Shopify GraphQL Google Apps Script
ポイントと感想
credential情報(user:pw)をurlに入れるのは、Google Apps Scriptが対応してないので、headerに入れる。
以前は、これでいけたけど、shopifyのアプリの認証仕様の変化で、プライベートアプリでTOKENそのものがあるので、以下で行く。
"X-Shopify-Access-TOken": TOKEN
graphqlで行く場合
resourceを graphql.json
query内容で products, customersなどを指定する
mutationの場合は、request部分の文字整形を気をつける(下のコードを参照)
"Content-type": "application/graphql"
methodは queryだけならgetでよい。queryを複雑にしたい場合はRestは諦める。
graphqlにする。post, putなどは試してない。
content-Typeは、application/jsonで良い
最初は、GraphQLに慣れるために、公式docでサンプルみる。アプリ側で graphql explorerを使って慣れておく。
code: shopify_graphql_gas.js
const SHOPNAME = "xxx"
const TOKEN = "YOUR-TOKEN";
function testReq(){
const query = `{
products(first: 3) {
edges {
node {
id
title
}
}
}}`;
const ret = req("graphql", "post", query);
Logger.log(ret);
}
function req(resource, method, query) {
const url = https://${SHOPNAME}.myshopify.com/admin/api/2020-04/${resource}.json
const options = {
'method': method,
'payload': JSON.stringify({query:query, variables: {}}),
'muteHttpExceptions':true,
'headers': {
"X-Shopify-Access-TOken": TOKEN,
"Content-type": "application/graphql"
}
};
//Logger.log(options);
const ret = UrlFetchApp.fetch(url, options);
//Logger.log(ret);
}
mutationの場合。parse Errorが出て悩んだけど、mutation...の部分、最初に改行があるとエラーになるっぽい。
graphicalでエラーが出ないmutationを出して、Chrome Devtoolsでリクエストログをcurl用に出して、request bodyに合わせたら、OKだった。 code: shopify_graphql_mutation.js
const mutation = `mutation($input: ProductInput!){
productUpdate(input: $input){
product{
id
}
userErrors{
field
message
}
}}`;
const variables = {
"input": {
"id": gid,
"metafields": [
{
"namespace": "products",
"key": "my-key",
"value": "my-value",
"valueType": "STRING"
}]}};
const options = {
'method': method,
'payload': JSON.stringify({query:query, variables: variables}),
'muteHttpExceptions':true,
'headers': {
"X-Shopify-Access-TOken": TOKEN,,
"Content-type": "application/graphql"
}
};
UrlFetchApp.fetch(url, options);
その他
Postmanで行く場合も、content-typeは、applicatin/jsonで良い。