Shopify-managed installation を使うアプリが、任意の書き込みスコープを対応する読み取りスコープに置き換えられる。読み取り権限を失わずに書き込み権限だけを手放せる。既存アプリの対応は不要。
appDowngradeAccessScopes が使えるようになる。appRevokeAccessScopes で write スコープを取り消すと、その write 経由でしか付与されていなかった read アクセスも一緒に消える。
appDowngradeAccessScopes なら write だけを手放し、対応する read は残る。例 : write_products → read_products。
| 項目 | appRevokeAccessScopes | appDowngradeAccessScopes |
|---|---|---|
| write スコープ | 削除 | 削除 |
| write 経由でのみ付与された read | 一緒に消える | 対応する read に置換して残る |
| 向いている場面 | そのリソースへのアクセス自体が不要になった | 書き込みは不要だが、読み取りはまだ必要 |
| 利用可能バージョン | 記載なし | 2027-01〜 Admin GraphQL API |
インストールとスコープ管理を Shopify に任せる方式のアプリが対象。
任意の write スコープと、それに対応する read スコープを持っていること。
作成・更新が不要になった optional write スコープを洗い出す。
API 2027-01 以降で appDowngradeAccessScopes に対象スコープを渡す。
downgraded で成功したスコープを、userErrors で失敗理由を確認。
正常に変更された write スコープの handle が返る。
field と message で失敗内容を確認する。1 件でも失敗すれば全体が拒否される点に注意。
それより前のバージョンでは呼べない。使うなら API バージョンの引き上げが前提。
required スコープは downgrade できない。格下げの可能性がある write は、最初から optional_scopes 側に置く設計が必要。
1 件でも不正があると全体が拒否され、スコープは変わらない。複数を一度に渡すときは userErrors のハンドリングが必須。
現在付与されていない write はエラーにならず無視される。実際に変わったものは downgraded で判定する。
appRevokeAccessScopes で write を取り消すと、write 経由でしか付与されていなかった read も消える。read をまだ使うコード(同期処理・表示など)が残っているなら Downgrade を選ぶ。影響は呼び出したアプリ自身のインストールにのみ及ぶ。
write_products を持ち続けているが、商品データの読み取りはまだ使っている。appDowngradeAccessScopes(scopes: ["write_products"]) を呼び、read_products に格下げする。write_products が optional_scopes に宣言されていることが前提。required なら格下げ不可。userErrors が空かどうか、downgraded に何が返ったかを確認する。downgraded の内容で結果を判定する。