Shopify、オフラインアクセストークンの更新を堅牢化 旧トークンを30日保持
Shopify 開発者チェンジログ公式発表
ShopifyECOAuthAPIアプリ開発
Shopify は8月28日、有効期限付きオフラインアクセストークンの更新処理を改良した。アプリが新しいトークンを使い始めるまで直前のリフレッシュトークンを保持し、通信断や保存失敗からの復旧を可能にする。移行作業は不要で全アプリに自動適用される。
何が発表されたか
- 有効期限付きオフラインアクセストークンの更新方式を変更
- 「アプリが置き換え後のトークンを使い始めるまで、直前のリフレッシュトークンを保持する」ようになった
- レスポンスの喪失や保存失敗が起きた場合のリカバリ手段として機能する
- リトライ可能な期間は元トークンの初回使用から最大30日。ただし標準の90日というトークン寿命自体は延びない
- Admin GraphQL API と Admin REST API の双方で、対象アプリすべてに自動適用
- 移行作業は不要。ただし推奨プラクティスは従来どおり守る必要がある
- ショップ単位でリフレッシュ処理を直列化する
- リフレッシュのたびにトークンのペアをアトミックに保存する
- 常に最新のリフレッシュトークンを使う
- あくまで復旧手段であり、古いトークンを保持し続けてよいという意味ではない
開発者への影響
Shopify アプリを運用していると、深夜のバッチ中に worker が落ちる、DB 書き込みが失敗する、といった理由でトークンが行方不明になり、マーチャントに再認証を依頼する羽目になることがある。今回の変更はまさにその事故を吸収する仕組みで、実装を変えなくても恩恵を受けられる。
ただし「30日間リトライできる」ことを前提に運用を緩めるのは危険だ。リフレッシュ処理をショップ単位で直列化していないアプリは、並行リクエストで新旧トークンが交錯する既存の不具合を抱えたままになる。この機会に、トークン保存がアトミックか(アクセストークンとリフレッシュトークンを別々にコミットしていないか)を確認しておきたい。
小規模な Shopify アプリを受託で作っている場合、再認証依頼はそのまま問い合わせ工数になる。運用コストを下げる地味だが効く変更だ。
