「publicationId」と「channelId」の検証について

1. 技術的課題の定義と現状分析

Admin GraphQL APIの2023年4月バージョンにおいて、publicationId及びchannelIdフィールドのPublicationInputが、publishableUnpublishproductUnpublishのミューテーション呼び出しにおいて検証されるようになります。これにより、ミューテーションに送信されるIDがデータベース内の既存のレコードに対応していることを確認できます。

2. 具体的な技術的ソリューションの提案

このアップデートにより、publicationIdフィールドの検証メッセージが「Channel can't be blank」から「Publication does not exist」に変更されます。これにより、存在しないパブリケーションIDが指定された場合に明確なエラーメッセージが表示され、デバッグ作業がより容易になります。

3. 実装手順とコード例

既存のコードに対する影響を最小限に抑えるためには、publishableUnpublishproductUnpublishの呼び出しにおいて、publicationIdchannelIdが存在するか事前に確認することが推奨されます。具体的な実装例は以下のとおりです。

1. PublicationとChannelが存在することを確認します。

const publication = db.Publication.findOne({id: publicationId});
const channel = db.Channel.findOne({id: channelId});
if (!publication || !channel) {
  throw new Error("Publication or Channel does not exist");
}

2. publicationIdとchannelIdを使用してpublishableUnpublishまたはproductUnpublish mutationを呼び出します。

mutation {
  publishableUnpublish(publicationId: $publicationId) {
    userErrors {
      field
      message
    }
  }
}

4. パフォーマンス・コスト分析

このアップデートにより、存在しないIDによるミューテーションの呼び出しを防ぎ、無駄なAPI呼び出しを減らすことができます。これにより、パフォーマンスの向上とコストの軽減が期待できます。

5. 実装時の注意点・ベストプラクティス

このアップデートは、APIのバージョン2023-04以降で利用可能です。旧バージョンを使用している場合は、バージョンアップを検討してください。

6. 次のステップ・発展案

今後は、他のmutationでも同様の検証が行われる可能性があるため、存在確認の処理を共通化し、再利用可能なように設計することを推奨します。

参考記事: Publication Id and channel Id validations