External Data Source
外部APIからデータを取得し、セレクトボックス、チェックボックス、オートコンプリートウィジェットを使用してフィールドオプションとして表示するフィールドタイプを提供します。
external_data_source
インストール
composer require 'drupal/external_data_source:^3.2'
composer require 'drupal/external_data_source:^3.1'
概要
External Data Sourceは、外部APIとDrupalのフィールドシステムの橋渡しをする開発者向けモジュールです。REST APIやWebサービスなど、任意の外部データソースからオプションを動的に取得できるカスタムフィールドタイプを提供します。
このモジュールはプラグインベースのアーキテクチャを採用しており、開発者はExternalDataSourceプラグインを作成して任意の外部APIからデータを取得できます。これらのプラグインがデータの取得とフォーマットを処理し、モジュールは取得したデータを選択可能なオプションとして表示するすぐに使えるフィールドウィジェット(セレクトボックス、チェックボックス、オートコンプリート)を提供します。
このモジュールには、外部APIとの統合方法を示す3つのサンプルプラグインが付属しています:RestCountries APIを使用する国プラグイン、フランス政府のgeo APIを使用するフランスの郵便番号プラグインとフランスの地域プラグインです。
Features
- 外部APIから取得した値を保存するカスタムフィールドタイプ
- ドロップダウン形式でオプションを表示するセレクトウィジェット
- チェックボックスまたはラジオボタンとしてオプションを表示するチェックボックスウィジェット
- 外部APIからAJAXで候補を取得するオートコンプリートウィジェット
- 開発者が新しいデータソースを簡単に追加できるプラグインベースのアーキテクチャ
- 国、フランスの郵便番号、フランスの地域用の組み込みサンプルプラグイン
- APIレスポンスの最大結果数の設定
- すべてのウィジェットで複数値をサポート
Use Cases
国選択フィールド
動的に取得された国リストからユーザーが国を選択できるフィールドを作成します。組み込みのCountriesプラグインを使用すると、フィールドはRestCountries APIから最新の国リストを自動的に取得し、ドロップダウン、チェックボックス、またはオートコンプリートフィールドとして表示します。
地理的位置フィールド
郵便番号や地域などのフランスの地理データを必要とするフォームを構築します。付属のFranceZipCodesおよびFranceRegionsプラグインは、正確で最新の地理データを提供するフランス政府のgeo APIとの統合を示しています。
カスタムAPI統合
カスタムExternalDataSourceプラグインを開発して、組織のREST APIから商品カテゴリ、ユーザーリスト、在庫アイテム、その他のデータを取得します。プラグインアーキテクチャにより、コアモジュールのコードを変更せずに新しいデータソースを簡単に追加できます。
動的フォームオプション
静的なセレクトリストを、ソースデータが変更されると自動的に更新される動的オプションに置き換えます。これは、為替レート、在庫状況、リアルタイムの価格帯など、頻繁に変更されるデータに特に便利です。
Tips
- ExternalDataSourceBaseを拡張し、getResponse()メソッドを実装してカスタムExternalDataSourceプラグインを作成する
- getResponse()メソッドは'value'と'label'キーを持つオブジェクトの配列を返す必要がある
- プラグイン内で$this->qプロパティを使用してオートコンプリート検索クエリにアクセスする
- 大規模なデータセットの場合、すべてのオプションを事前に読み込むのではなく、ユーザーが入力するとAPIにクエリを送信するオートコンプリートウィジェットを使用する
- フィールドストレージ設定(ws、count、max_length)はデータが入力された後は変更できない
- API呼び出しを減らしてパフォーマンスを向上させるために、カスタムプラグインでキャッシュの実装を検討する
Technical Details
Troubleshooting 4
少なくとも1つのExternalDataSourceプラグインが利用可能であることを確認してください。モジュールにはサンプルプラグイン(Countries、FranceZipCodes、FranceRegions)が含まれています。カスタムプラグインを作成する場合は、プラグインアノテーションが正しいことを確認し、Drupalキャッシュをクリアしてください。
外部APIがサーバーからアクセス可能であることを確認してください。プラグインのsetRequest()メソッドがリクエストオブジェクトを正しく受け取り、getResponse()メソッドがフィルタリング用の'q'クエリパラメータを処理していることを確認してください。
設定されたプラグインが削除または名前変更された場合に発生します。フィールドストレージ設定を編集し、ドロップダウンから利用可能なプラグインを選択してください。
モジュールにはデータのサニタイズ用にUTF8Utils変換が含まれています。問題が続く場合は、カスタムプラグインのformatResponse()メソッドが文字エンコーディングを適切に処理していることを確認してください。
Security Notes 4
- モジュールのオートコンプリートエンドポイントには'access content'権限が必要で、認証済みまたは許可されたユーザーへのアクセスを制限している
- 外部API呼び出しはサーバー側で行われ、エンドユーザーへのAPIエンドポイントの露出を防いでいる
- 入力値はフォーマッターでHTMLエスケープされ、XSS攻撃を防いでいる
- 統合する外部APIのセキュリティへの影響、特にデータプライバシーと認証について検討すること