🌓

ShopifyアプリのサンプルがGraphQLにApollo Clientを使わなくなっていた

2022/12/05に公開

ShopifyアプリのサンプルがNext.js / Koa / webpackを使わなくなっていたので経緯を調べたの続編。

Shoipfyアプリを作成するときのテンプレートになっているShopify/shopify-app-template-nodeのmainブランチ src/App.jsx を見るとApollo Clientを使っている様が確認できる。

が、これは古く、最新と思しき cli_three_api_six_express_one ブランチを見るとApollo Clientは使われなくなっている。Adapting the starter template to work with the CLIというコミットでApollo Clientは削除されており、CLIバージョン3の対応の一環で変更が入ったと思われる。

フロントからのGraphQLをやめた?

現在のShopifyアプリ開発のチュートリアルページでは useAppQuery() を使ってサーバーサイドにリクエストを送信する説明になっている。useAppQuery() はセッショントークンをHTTPヘッダに付けてReact Queryの useQuery() を呼び出している。

サーバーサイドはShopify.Clients.Graphqlを使う

@shopify/shopify-api パッケージのShopify.Clients.Graphqlを使う。Shopify.Clients.Graphqlのコードをみるとアクセストークンをヘッダに付けて素直にHTTPする実装になっている。

HTTPに使われているHttpClientをみると必要最低限ヘッダやリクエスト方法の調整を行なってnode-fetchでリクエストする実装。 パラメーターの tries によってリトライする仕組みが用意されている。
(2022/12/14 追記) tries によるリトライはREST APIのみ動作するようでGraphQLはRate Limitになっても429を返さず200を返してレスポンスbodyの errors があるかでエラー判定しているので tries パラメーターによるリトライは動作しなかった。

こういう理由でこうしましたと説明している文章が見つからないので、あくまでもGitHubのコードを見て読み取ったことのメモです。

Discussion