Entity Share
Entity Shareは、JSON:APIを使用して複数のDrupalウェブサイト間でコンテンツを共有できるようにします。サーバー側のチャンネルとクライアント側のプルインターフェースを提供し、サイト間でエンティティを同期します。
entity_share
インストール
composer require 'drupal/entity_share:8.x-3.13'
概要
Entity Shareは、JSON:APIを使用して複数のDrupalウェブサイト間でコンテンツを共有できる包括的なモジュールです。このモジュールはサーバー・クライアントアーキテクチャに従い、1つのウェブサイトが「サーバー」(チャンネル経由でコンテンツを提供)として機能し、別のサイトが「クライアント」(サーバーからコンテンツをプル)として機能します。1つのウェブサイトがサーバーとクライアントの両方として同時に機能することもできます。
このモジュールは、カスタマイズ可能なフィルター、ソート、検索、アクセス制御を備えたサーバーチャンネルを管理するための完全なUIを提供します。クライアント側では、リモートウェブサイト管理、プロセッサベースのパイプラインによるインポート設定、エンティティインポートステータスの追跡を提供します。高度な機能には、ローカルとリモートのエンティティ間の差分表示、インポートされたコンテンツの編集を防ぐインポートロック、キュー処理による非同期インポート機能が含まれます。
Entity Shareは、OAuth 2.0、Basic Auth、ヘッダーベース認証、匿名アクセスなど、複数の認証方法をサポートしています。また、メタタグ、Pathautoフィールド、ブロックフィールド、埋め込みエンティティなどの複雑なフィールドタイプ用のJSON:APIフィールドエンハンサーも提供しています。
Features
- 完全なCRUDサポートを備えたJSON:APIベースのDrupalサイト間エンティティ共有
- フィルター、ソート、検索、フィルターグループを備えたサーバー側チャンネル設定
- 複数の認証方法(OAuth、Basic Auth、ヘッダー、匿名)を備えたクライアント側リモートウェブサイト管理
- 前処理、処理、後処理ステージをサポートするプロセッサベースのエンティティインポートパイプラインを備えたインポート設定
- 変更検出機能を備えたエンティティインポートステータス追跡
- Queueワーカーによる非同期エンティティインポートサポート
- ローカルとリモートのエンティティバージョンの並列差分表示
- 同期されたコンテンツの編集を防ぐインポートロック
- メタタグ、Pathauto、ブロックフィールド、埋め込みエンティティ用のJSON:APIフィールドエンハンサー
- CLIベースのエンティティインポート用Drushコマンド
- インポートステータス管理用のViews統合
- Paragraphs、エンティティ参照、ファイル、メディアを含む複雑なフィールドタイプのサポート
Use Cases
マルチサイトコンテンツ配信
中央コンテンツハブをEntity Share Serverとして設定し、複数の地域サイトや部門サイトをクライアントとして設定します。コンテンツ編集者がハブで記事を作成し、地域編集者が関連コンテンツを自分のサイトにプルします。各地域サイトは、翻訳処理やコンテンツポリシーなどのローカル要件に対応するために異なるインポート設定を持つことができます。
ステージングから本番へのコンテンツ同期
Entity Shareを使用してステージング環境から本番環境へコンテンツを同期します。レビュー済みコンテンツ用のチャンネルを持つサーバーとしてステージングサイトを設定します。本番はクライアントとして機能し、承認されたコンテンツのみをプルします。インポート設定で、すでにインポートされたコンテンツをスキップし、ローカルで変更されたエンティティの上書きを防止できます。
複数ソースからのコンテンツ集約
複数のEntity Share Serverサーバー(異なる部門、パートナー、コンテンツソース)に接続するクライアントとしてサイトを設定します。各リモートは独自の認証設定を持ちます。異なるコンテンツ構造やポリシーに対応するため、ソースごとにインポート設定をカスタマイズできます。
ヘッドレスCMSコンテンツ配信
Entity Share Serverを使用してヘッドレスDrupal CMSからコンテンツチャンネルを公開します。複数のプレゼンテーション層アプリケーションがJSON:APIベースのチャンネル経由でコンテンツをプルできます。これにより、基本的なJSON:API読み取り操作を超えた標準化されたコンテンツ同期メカニズムが提供されます。
コンテンツバックアップとリカバリ
コンテンツの冗長性のためにプライマリサイトとバックアップサイト間でEntity Shareを設定します。バックアップサイトはcronジョブでDrushコマンドを使用してプライマリサイトから定期的にコンテンツをプルします。インポートステータス追跡により、変更されたコンテンツのみが同期され、差分機能によりコンテンツの整合性を検証できます。
パートナーサイト間の選択的コンテンツ共有
パートナー関係を持つ組織は、アクセス制御を慎重に設定したチャンネルを通じて特定のコンテンツタイプを共有できます。チャンネルはサーバー側で特定のユーザーやロールに制限でき、クライアントは適切な認証で設定できます。インポートポリシーにより、共有コンテンツがローカルコンテンツとどのように統合されるかを制御します。
Tips
- 本番環境ではセキュリティ向上のためBasic Authではなく OAuth認証を使用する
- 公開コンテンツを制限しインポートのオーバーヘッドを削減するためにチャンネルフィルターを設定する
- 完全性とパフォーマンスのバランスを取るためにEntity Referenceプロセッサで適切な再帰深度を設定する
- 後続のインポートで変更されていないコンテンツの再処理を避けるためにSkip Importedプロセッサを有効にする
- 更新されたコンテンツをインポートする前に変更を確認するために差分機能を使用する
- マルチ環境デプロイメントでの認証情報保存にはKeyモジュールの使用を検討する
- 自動コンテンツ同期のためにDrushコマンドをcronで設定する
- 複雑なチャンネルフィルタリングロジックのためにAND/OR結合を持つフィルターグループを使用する
- コンテンツ編集者が特定のコンテンツを簡単に見つけられるようにチャンネルで検索を設定する
- 同期状態の追跡と問題の特定のためにインポートステータスエンティティを監視する
Technical Details
Admin Pages 10
/admin/config/services/entity_share
Entity Shareモジュールのメイン設定ハブ。チャンネル、リモートウェブサイト、インポート設定、差分設定を含むすべてのEntity Share設定ページへのリンクを提供します。
/admin/config/services/entity_share/channel
コンテンツ共有用のサーバーチャンネルを一覧表示および管理します。各チャンネルはJSON:API経由で特定のエンティティタイプとバンドルを公開します。チャンネルはフィルター、ソート、検索、アクセス制御で設定できます。
/admin/config/services/entity_share/channel/add
共有用にエンティティを公開する新しいチャンネルを作成します。
/admin/config/services/entity_share/remote
コンテンツをプルするためのリモートウェブサイト接続を一覧表示および管理します。リモートサイトのURLと認証方法を設定します。
/admin/config/services/entity_share/remote/add
リモートEntity Shareサーバーへの接続を設定します。
/admin/config/services/entity_share/import_config
インポート中にエンティティがどのように処理されるかを定義するインポート設定を一覧表示および管理します。各設定には特定の設定を持つプロセッサのセットが含まれます。
/admin/config/services/entity_share/import_config/add
プロセッサ設定を含む新しいインポート設定を作成します。
/admin/content/entity_share
リモートウェブサイトからエンティティをプルするためのメインインターフェース。リモートを選択し、チャンネルを選び、エンティティを検索およびフィルタリングして、選択したコンテンツをインポートします。
/admin/content/entity_share/statuses
インポートされたエンティティの追跡情報を表示します。エンティティタイプ、バンドル、UUID、ソースリモート、チャンネル、最終変更時刻を表示します。
/admin/config/services/entity_share/diff
エンティティ比較の差分表示設定を構成します。
権限 8
Hooks 1
hook_entity_share_server_channel_list_alter
クライアントに返されるチャンネル一覧をモジュールが変更できるようにします。
Drush Commands 2
drush entity-share-client:pull
リモートウェブサイトのチャンネルからすべてのエンティティをプルします。
drush entity-share-client:pull-entities
チャンネルからUUIDを指定して特定のエンティティをプルします。
Troubleshooting 8
リモートURLが正しく、アクセス可能であることを確認します。認証方法が有効な認証情報で適切に設定されていることを確認します。リモートの認証済みユーザーが「チャンネル一覧へのアクセス」権限を持っていることを確認します。サイトが異なるドメインにある場合は、ブラウザコンソールでCORSエラーを確認します。
リモートサーバーの認証済みユーザーには、プルされるエンティティへの閲覧アクセス権が必要です。Nodeの場合、これには通常「公開済みコンテンツの閲覧」または適切なNode Accessパーミッションが必要です。メニューリンクの場合は、Menu Link Content View Accessモジュールをインストールします。
インポート設定でEntity Referenceプロセッサを有効にします。「最大再帰深度」設定を確認します - 深くネストされた参照には増やす必要があるかもしれません。Paragraphsの場合は、Embedded Entity Importerプロセッサが有効になっていることを確認します。
Physical Fileプロセッサを有効にします。リモートサーバーがファイルダウンロードを許可し、クライアントサイトに適切なファイルシステム権限があることを確認します。認証済みユーザーがリモートでファイルエンティティにアクセスできることを確認します。
インポートステータス追跡はエンティティUUIDと言語に基づいています。エンティティがローカルで削除されて再作成された場合、またはインポートステータスエンティティがクリアされた場合、新規として表示されます。インポートサービスはリモート/チャンネルの組み合わせごとにステータスを追跡します。
すべてのOAuth認証情報(クライアントID、シークレット、エンドポイント)を確認します。Simple OAuthモジュールが一致するクライアント設定でサーバーに適切に設定されていることを確認します。Resource Owner Password Credentials Grant用のユーザー名/パスワードが正しいことを確認します。
Entity Share Diff設定でコンテキスト行の設定を確認します。ローカルとリモートの両方のエンティティが存在することを確認します。差分機能では、比較用のローカルバージョンを持つために、エンティティが以前にインポートされている必要があります。
サイトでcronが定期的に実行されていることを確認します。データベースログでQueueステータスを確認します。entity_share_async_workerキューを処理する必要があります。大規模なインポートの場合は、PHPメモリ制限の増加を検討します。
Security Notes 7
- 本番サイトでは設定ではなくKeyモジュールを使用してOAuth認証情報とAPIキーを保存する
- 「チャンネルエンティティの管理」、「リモートウェブサイトエンティティの管理」、「インポート設定エンティティの管理」権限は信頼できる管理者のみに制限する
- JSON:API経由でコンテンツにアクセスできるユーザーを制限するためにチャンネルアクセス制御を設定する必要がある
- 機密性の高い環境間のコンテンツ共有にはネットワークレベルの制限(ファイアウォール、VPN)を検討する
- 「技術エラーの表示」権限は機密性の高いリクエスト詳細が公開される可能性があるため、開発者にのみ付与する
- 適切なコンテンツ所有権とモデレーションワークフローを確保するためにインポートコンテンツポリシーを確認する
- セキュリティのベストプラクティスに従ってOAuthトークンと認証情報は定期的にローテーションする