AppUsageRecordの冪等性による作成
1. 技術的課題の定義と現状分析
ShopifyのAdmin GraphQL APIでは、appUsageRecordCreateによるアプリ使用記録の作成が可能です。しかし、同じアプリ使用記録が複数回作成されると、誤ってマーチャントに対して二重請求が発生する可能性がありました。これは、開発者やマーチャントにとって大きな課題となります。
2. 具体的な技術的ソリューションの提案
この課題に対する解決策として、Admin GraphQL APIの2023年4月版では、appUsageRecordCreateに冪等性のキー(idempotencyKey)を追加することで、二重請求を防止する機能が導入されました。このキーが提供されると、同一のidempotencyKeyを持つ以前のappUsageRecordCreateのミューテーションと同じレスポンスを返し、新たなレコードを作成せず、マーチャントに再度請求することはありません。
3. 実装手順とコード例
idempotencyKeyを利用するための基本的な実装手順は以下の通りです。
-
idempotencyKeyを生成します。UUIDの利用が推奨されています。 - 作成するアプリ使用記録のミューテーションに
idempotencyKeyを追加します。
mutation {
appUsageRecordCreate(idempotencyKey: "UUID", input: {
description: "使用記録の説明",
price: { amount: 10.0, currencyCode: USD }
}) {
userErrors {
field
message
}
}
}
4. パフォーマンス・コスト分析
idempotencyKeyの導入により、同じアプリ使用記録の二重作成という誤りを防止できます。これにより、マーチャントへの不必要な請求を防ぎ、信頼性の向上に寄与します。また、開発者は安全にアプリ使用記録を作成することが可能となり、開発効率と品質が向上します。
5. 実装時の注意点・ベストプラクティス
idempotencyKeyが提供されない場合、appUsageRecordCreateは過去のAPIバージョンと同様に振る舞い、毎回新しいレコードを作成します。したがって、二重請求を避けるためには、idempotencyKeyの提供が必要です。
6. 次のステップ・発展案
アプリはidempotencyKeyを再利用して異なるショップでappUsageRecordを作成し、マーチャントに請求することが可能です。また、異なるアプリは同じショップで同じidempotencyKeyを使用してもショップに請求できます。これにより、アプリ間での課金管理の柔軟性が向上します。






Share:
Shopify Functions開発者プレビューにおけるJavaScriptのサポート
翻訳可能な機能を用いてメタオブジェクトを翻訳する