ContentfulのAPIエンドポイントを整理します。
どうも、ベルリンオフィスの小西です。
ヘッドレスCMSのContentfulでは、投稿した記事やアセットをAPIで取得します。
取得するコンテンツの種類によって、リクエストを投げるエンドポイントが異なってくるため、今回はエンドポイントの種類を整理してみます。
記事・アセット取得のエンドポイント
Contentfulの記事やアセットのデータを取得するエンドポイントは、権限別に3種類あります。
- api.contentful.com
- cdn.contentful.com
- preview.contentful.com
cdn.contentful.com
Contentful Delivery API(= 本番用の記事取得API)のエンドポイントです。
本番環境用を想定しており、公開されている記事のみを取得します。
また、読み取り専用です。
三種類の中では最も権限が限定されているAPIになり、下書き(Draft)状態の記事は取得できない点にご注意ください。
preview.contentful.com
Content Preview API(= 本番公開前のプレビュー用記事取得API)のエンドポイントです。
先述のDelivery APIで取得できる内容に加え、下書き状態の記事とアセットも取得できます(というか、公開済み記事と並列で取得できてしまうので、本番サイトに使うべきではありません)。
こちらも読み取り専用です。
StagingサイトやGatsbyのプレビューアプリで使う想定かと思います。
api.contentful.com
Content Management API(= Contentfulスペース内のコンテンツを編集できるAPI)のエンドポイントです。
記事やアセットの投稿・編集・削除、設定変更などが可能な最上位権限のAPIになります。
上位2つと異なりOrganization単位で発行でき、発行時のみキートークンが確認でき、画面を移動すると再度キートークンを表示することができません。
注意点として、大量の記事やアセットの読み込みには、cdn.contentful.com (Contentful Delivery API)を使うのが推奨です。
もちろん api.contentful.com でもコンテンツの読み取りは可能ですが、パフォーマンスは読み取り専用エンドポイントを使うより悪くなります。
アセット配信のCDNのエンドポイント
ContentfulはCloudFrontをベースとしたCDNを持っており、画像や動画を始めとしたメディアを投稿・管理・配信することができます。
それら個別のアセットを取得するAPIのエンドポイントも複数あります。
- images.ctfassets.net
- downloads.ctfassets.net
- videos.ctfassets.net
- assets.ctfassets.net
images.ctfassets.net
20MB未満の画像を配信するエンドポイントです。アセット配信で最も使われるCDNかと思います。
Contentfulではエンドポイントへのリクエストにパラメータを付与することで画像変換・操作が可能です。
Contentfulだけで画像変換が割と優秀。フォーマット変換・リサイズ・顔切り抜きなど試してみたよ
ここで重要なのが、Contentful画像の変換・操作は、このエンドポイントでのみ可能です。
言い換えると、20MB以上の画像アセットを操作することはできません。(大量の画像の操作・配信・管理には、弊社もパートナーになっている Cloudinary をご検討ください)
ちなみに、Contentfulのエンタープライズアカウントでは アセット保護機能 があります。
アセット保護機能を有効化すると、画像配信のエンドポイントは images.secure.ctfassets.net となり、リクエストに認証情報を付与しないと画像が閲覧できなくなります。また非公開の画像は images.ctfassets.net からアクセスができなくなります。
downloads.ctfassets.net
20MB以上の画像を配信するエンドポイントです。
videos.ctfassets.net
動画アセットを配信するエンドポイントです。
assets.ctfassets.net
上記のエンドポイントで配信されるアセット以外全てを配信するエンドポイントです。
例えば pdfs, docs, xls などのファイルはここから配信されます。
以上です。
さいごに
例えばGatsbyでContentfulのプラグイン gatsby-source-contentful
を使う場合、データ取得先はあまり意識しなくても問題はないですが、Contentfulの特徴である拡張性を生かしてアプリやプラグインを開発する際には知っておくと有益な情報かと思います。