JSS Next.jsアプリをSitecoreエディターと統合するためのアーキテクチャとAPI
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
Next.jsアプリケーションは、Sitecore Headless Services HTTPレンダリングエンジン、Next.js APIルート、Next.jsプレビューモード を使用してエクスペリエンスエディターと統合します。
次の図は、Next.js JSSアプリをエクスペリエンスエディターと統合するアーキテクチャを示しています。
この図では、Next.jsのJSSに含まれるAPIが青緑色で強調表示されています。他の色の要素は、Next.js JSSサンプル アプリケーションの一部です。
APIルート
Sitecoreエディターと統合するために、Next.js JSSサンプル アプリケーションには、次の3つのNext.js APIルートが含まれています。
-
ファイル <src>/pages/api/editing/render.tsで定義されているレンダリングAPIルートは、JSS for Next.jsによって提供されるミドルウェアEditingRenderMiddlewareにカプセル化されたロジックを使用して、SitecoreエディターからのPOST要求を処理します。このルートをJSSアプリ設定オプションserverSideRenderingEngineEndpointUrlの値として使用します。
-
<src>/pages/api/editing/data/key.tsで定義されているData API Routeは、JSS for Next.jsが提供するミドルウェアEditingDataMiddlewareを使用して、Sitecoreエディターから送信されたデータの保存と取得を処理する動的Next.js APIルートです。
-
「 <src>/pages/...path.tsxで定義されている、メインNext.jsオプションのキャッチオールルートであるページルート」は、すべてのSitecoreページルートをレンダリングします。
JSS編集シークレット
JSS編集シークレットは、レンダリングAPIルートとデータAPIルートを通じてJSS Next.jsアプリによって公開されるSitecoreエディター エンドポイントを保護するために使用されるトークンです。
JSS Editing Secretは、クライアント側とサーバー側で設定する必要があります。
ミドルウェアEditingRenderMiddlewareとEditingDataMiddlewareは、トークンを自動的に検証します。検証に失敗した場合は、HTTPステータスコード401のレスポンスを返します。
Next.jsプレビューモード
プレビュー モードはNext.jsの組み込み機能で、CMSのユースケースで、ドラフト コンテンツ (Sitecoreエクスペリエンス エディターなど) を作成し、静的な生成をバイパスしてリクエスト時にこのコンテンツを含むページをレンダリングすることを目的としています。
Next.js JSSアプリとSitecoreエディターの統合は、この機能に依存します。
EditingRenderMiddlewareミドルウェアは、Next.jsプレビュー モードを有効にします。Next.jsプレビュー モードは、Render API Routeレスポンスに特定のCookieを作成し、それらを後続のPage Routeリクエストに渡します。
Page Props Factoryは、ページのレンダリングに必要なすべてのデータを準備する役割を担い、現在のルートがプレビューモードになっているかどうかを確認します。ページがプレビューモードであると判断された場合、Page Routeリクエストは編集リクエストであり、プレビュー/編集データを使用できます。
JSS Next.jsでのデータ編集について
SitecoreエディターがRender API Routeに対して行うPOSTリクエストには、特定のページ ルートをレンダリングするために必要なすべてのものが含まれています。このリクエストには、レイアウト、辞書、言語のデータに加えて、エディターのレンダリングに必要な追加のメタデータと未保存のレイアウト情報が含まれます。このデータは、データの編集と呼ばれます。
Page Props Factoryは、編集データを使用してページpropsを取り込みます。編集モードではないときに個別に取得するのではなく、ページ に入力します。
要求間での編集データの保守
Vercelにデプロイすると、Render API Routeは自動的にPage Routeから完全に分離されたサーバーレス関数になり、サーバー上のNode.jsメモリキャッシュなど、データを編集するための単純なストレージソリューションのオプションがなくなります。
このSitecore Next.js SDKには、Vercel Serverless Functionsとの互換性の問題を解決するキャッシュ実装が含まれています。
Next.jsはプレビュー データをCookieに保存します。Next.jsプレビュー モードには 、プレビュー データのサイズ制限が2KBあり、Sitecore編集データはこの制限を超えています。データを編集するためのカスタムストレージソリューションは、この問題も解決します。
APIの
Sitecoreエディターの統合に関連するAPIは、middlewareサブモジュールの @sitecore-jss/sitecore-jss-nextjs NPMパッケージにありますが、EditingDataServiceは除きます。
これらを使用するには、コード ファイルにインポートします。例えば:
import { EditingRenderMiddleware } from '@sitecore-jss/sitecore-jss-nextjs/middleware';
import { editingDataService } from '@sitecore-jss/sitecore-jss-nextjs';編集RenderMiddleware
EditingRenderMiddlewareは、Render API Routeを編集するためのミドルウェア/ハンドラです。ミドルウェア:
-
JSS編集シークレットを検証します。
-
POST要求ペイロードから編集データを抽出し、取得用のキーを返すEditingDataServiceを使用してデータを一時退避します。
-
Next.jsプレビュー モードを有効にし、stashされた編集データ キーをプレビュー データとして渡します。
-
Page Routeリクエストを呼び出し、プレビュー モードのCookieを渡します。
-
レンダリングされたページのHTMLを、想定されるJSON形式でSitecoreエディターに返します。
-
VercelでJSS Next.jsアプリケーションをホストしていないときに、HTTPリクエストのプロトコルをオーバーライドできます。
EditingDataService (データサービスの編集)
EditingDataServiceは、リクエスト間でSitecoreエディターデータの保守(データの編集)を担当するサービスです。
通常は、デフォルト値を持つEditingDataServiceシングルトンであるeditingDataServiceサービスを使用します。
EditingDataMiddleware (英語)
EditingDataMiddlewareは、データAPIルートを編集するためのミドルウェア/ハンドラです。
EditingDataMiddleware:
-
JSS編集シークレットを検証します。
-
EditingDataCacheを介してデータの編集を設定 (HTTP PUT要求) または取得 (HTTP GET要求) します。
データキャッシュの編集
EditingDataCacheは、編集データ キャッシュの実装を定義するインターフェイスです。
編集DataDiskCache
EditingDataDiskCacheはディスクベースのEditingDataCache実装です (デフォルト)。サーバーレス関数を使用してVercelでホスティングするために必要です。
Vercel以外のプラットフォームでNext.jsアプリケーションをホストしている場合、編集データ キャッシュで使用される一時ディレクトリが不安定なため、キャッシュ ミス エラーが発生する可能性があります。エラーを解決するには、ディスクベースの編集キャッシュ実装で使用されるデフォルトディレクトリを上書きします。