🙌

[FlutterWEB] graphql_flutterでShopifyAdminAPI利用時エラー

2023/03/27に公開

初めに

graphql_flutterの公式を参考に実装しましたが、401エラーでうまくいかなった為、解決した方法を記述します。
おおまかな流れは、参考リンクの提示のみで、詰まった部分のみを記述します。

↓Query等の殴り書きメモ↓
https://zenn.dev/tatukane/scraps/5facc8bc1f2a92

参考リンク

GraphQL
https://pub.dev/packages/graphql_flutter
https://flutterkaigi-2022-workshop.netlify.app/
Shopify Admin API
プライベートアプリを作成する記事が多いですが、現在プライベートアプリは作成できない為、カスタムアプリを作成します。
https://shopify.dev/docs/api/admin
https://www.cdata.com/jp/blog/shopify-jdbc-dbvisualizer-authentication
https://techlab.q-co.jp/articles/55/#PostmanによるShopify APIのテスト環境を作る
Query一覧
https://shopify.dev/docs/api/admin-graphql/2023-01/objects/queryroot
https://shopify.dev/docs/api/admin-graphql/2023-01/mutations/productCreate#examples-Create_a_new_metafield_on_a_new_product

401エラー

下記のコードでエラーが出ていました。
PostManでは問題なく通信できた為、URLやアクセストークンは間違えていなかった。

import 'package:graphql_flutter/graphql_flutter.dart';

const shopifyAccessToken = "アクセストークン";

final HttpLink httpLink = HttpLink(
  'https://{shopname}.myshopify.com/admin/api/2023-01/graphql.json',
);

final AuthLink authLink = AuthLink(
  getToken: () => 'Bearer $shopifyAccessToken',
);

final Link link = authLink.concat(httpLink);

final client = GraphQLClient(
  link: link,
  cache: GraphQLCache(
    store: HiveStore(),
  ),
);

原因は下記のコード。

final AuthLink authLink = AuthLink(
  getToken: () => 'Bearer $shopifyAccessToken',
);

次のように修正

final AuthLink authLink = AuthLink(
  headerKey: 'X-Shopify-Access-Token',
  getToken: () => shopifyAccessToken,
);

XMLHttpRequest error(CORS)

local hostで実行時にAPI通信ができないエラー。

QueryResult(source: QueryResultSource.network, data: null, context: Context({}),
exception: OperationException(linkException: ServerException(originalException:
XMLHttpRequest error.
  1. flutter\bin\cache内のflutter_tools.stampを削除

  2. flutter\packages\flutter_tools\lib\src\web内のchrome.dartを開く

  3. '--disable-extensions'を'--disable-web-security'に変更する

参考
https://stackoverflow.com/questions/65630743/how-to-solve-flutter-web-api-cors-error-only-with-dart-code

Discussion