9 Oracle JET RESTデータ・プロバイダAPIの使用
Oracle JETのRESTデータ・プロバイダAPI (RESTDataProvider
およびRESTTreeDataProvider
)を使用して、JSONベースのRESTサービスに問合せを送信し、結果データをアプリケーションにフェッチします。
RESTDataProvider
はOracle JETのDataProvider
インタフェースを実装し、RESTTreeDataProvider
はTreeDataProvider
インタフェースを実装します。RESTDataProvider
は、フェッチAPIを使用してJSONベースのRESTサービスからデータをフェッチする基本のAPIであるため、最初にこちらから説明します。RESTTreeDataProvider
は、RESTDataProvider
上に構築され、階層データを取得します。
Oracle JET RESTデータ・プロバイダについて
JSONベースのRESTサービスに問合せパラメータを送信する場合はRESTDataProvider
を使用して、問合せに一致するデータのサブセットがすべてのデータではなくJETアプリケーションに返されるようにします。
たとえば、部門のメンバーなど特定の条件に一致する従業員のリストをアプリケーションで表示する場合に使用します。条件に一致するデータ行を表示する前に、返されるデータを問い合せるJETアプリケーションに従業員の完全なリストをフェッチできます。不要なデータの要求を送信するため、これは非効率的です。かわりに、RESTDataProvider
のインスタンスを使用して、適切なデータのサブセットを返すRESTサービスに対するリクエストを作成します。
RESTDataProvider
は、RESTDataProvider
インスタンスの初期化時に指定するプロパティ・オプションであるtransforms
を使用してこれを実行します。RESTDataProvider
には3つのtransforms
プロパティ・オプションがあります。それらは、fetchFirst
、fetchByOffset
およびfetchByKeys
です。これらは、データ・プロバイダで使用可能な3つのフェッチ・メソッドに対応します。各プロパティ・オプションでは、次の関数を定義します:
request
: REST APIへのフェッチAPIコールに使用するRequestオブジェクトを作成する関数。ここでページング、フィルタリングおよびソートに必要な問合せパラメータをURLに適用して、リクエストの作成に使用できます。必要に応じて、headers
、body
、method
などのその他のリクエスト・オプションをリクエストに追加することもできます。response
: データおよびその他の関連値をレスポンス本文から抽出する関数。この関数は、少なくとも、タイプDの項目の配列(RESTDataProvider
クラスに渡される汎用)であるdata
プロパティを持つオブジェクトを返す必要があります。汎用タイプD
は、ロードされたデータのエントリのタイプに対応します。たとえば、個人情報データの場合、{ name: string, age: number }
というエントリのように、文字列および数値タイプのエントリがある場合があります。
Oracle JET Cookbookには、RESTDataProvider
の使用法を示す一連のデモが含まれています。概要デモでは、リクエストおよびレスポンスの機能を含むfetchFirst
メソッドを使用してRESTDataProvider
のインスタンスを初期化する方法を示します。Oracle JET CookbookのRESTデータ・プロバイダに関するページ、およびOracle® JavaScript Extension Toolkit (JET) Oracle JET APIリファレンスの「RESTデータ・プロバイダ」を参照してください。
Oracle JET RESTツリー・データ・プロバイダについて
JSONベースのRESTサービスから階層データを取得する場合は、RESTTreeDataProvider
を使用します。
RESTDataProvider
とRESTTreeDataProvider
の主な違いは、RESTTreeDataProvider
では、追加のインスタンス・メソッドgetChildDataProvider
と、同じくgetChildDataProvider
という名前のコンストラクタ・メソッドが公開されることです。これらのシグネチャは異なります。
- インスタンス・メソッドのシグネチャ:
getChildDataProvider(parentKey: K): TreeDataProvider<K, D> | null
- コンストラクタ・オプションのシグネチャ:
getChildDataProvider(item: Item<K, D>): DataProvider<K, D> | null
getChildDataProvider
メソッドは、親ノードのキーを引数として取り、それに対して子データ・プロバイダを作成します。これは、その後、親ノードの子をロードするRESTTreeDataProvider
インスタンス、またはnull
(ノードがリーフ・ノードの場合)を返します。リーフ・ノードは、子ノードを持つことができないノードです。
getChildDataProvider
に渡す親ノードのキーが、以前にフェッチされたアイテムに対応していない場合、またはメタデータがリーフ・ノードとして識別するアイテムである場合、getChildDataProvider
はnull
を返します。getChildDataProvider(parentKey: K)
へのコールは、parentKey
に対応するアイテムを取得した後、内部でgetChildDataProvider(item: Item<K, D>)
をコールすることに注意してください。したがって、これは、ノードのキーに対応するアイテムのメタデータにアクセスするコンストラクタ・オプションです。コンストラクタ・オプションはJETアプリケーションによって定義されるため、これは、RESTTreeDataProvider
ではなく、null
とDataProvider
インスタンスのどちらを返すかを決定するJETアプリケーションです。このフローはフェッチ・レスポンス変換を介してメタデータを返すJETアプリケーションから始まりますが、フロー全体が、ノードに子があるかどうかをアプリケーションが判断するために十分な情報を提供するメカニズムです。
Oracle JETクックブックでは、リーフ・フィールド名が、レスポンス変換を介してクックブックのモック・サーバーで提供されるメタデータに基づいていることにも注意してください。RESTサービスでは、別のフィールド名が使用される可能性があります。
Oracle JETクックブックのモック・サーバーによって使用されるメタデータの型は、{ key: K, leaf: boolean}[]
です。これは、対応するノードがリーフ・ノードであるかどうかを示します。これは、getChildDataProvider
を起動するときに便利です。親ノードがリーフ・ノードの場合は、null
を返します。それ以外の場合、ノードが子ノードを持つことができなくても、oj-tree-view
コンポーネントに展開矢印付きでノードがレンダリングされます。
もう1つ注意することは、RESTTreeDataProvider
の作成操作ではparentKeys
オプションを使用する必要があることです。これは、RESTツリー・データ・プロバイダに関するOracle JETクックブック・エントリのイベント・デモのaddChildNode
メソッドで確認できます。parentKeys
オプションの詳細は、Oracle® JavaScript Extension Toolkit (JET) Oracle JET APIリファレンスのデータ・プロバイダの追加操作イベントの詳細に関する項を参照してください。
Oracle JETクックブックには、RESTTreeDataProvider
APIの使用法を示す一連のデモが含まれています。概要デモでは、getChildDataProvider
メソッドを使用してRESTTreeDataProvider
のインスタンスを作成する方法を示します。「RESTツリー・データ・プロバイダ」を参照してください。Oracle JETクックブックのデモの他に、Oracle® JavaScript Extension Toolkit (JET) Oracle JET APIリファレンスのRESTツリー・データ・プロバイダに関する項も参照してください。
Oracle JET RESTデータ・プロバイダを使用したCRUDアプリケーションの作成
Oracle JET RESTデータ・プロバイダAPIを使用して、RESTサービスAPIから返されたデータに対してCRUD (作成、読取り、更新、削除)操作を実行するアプリケーションを作成します。
リリース11より前に使用することを推奨した共通モデルおよびコレクションAPIとは異なり、RESTDataProvider
およびRESTTreeDataProvider
にはCollection.remove
やModel.destroy
などのメソッドは含まれていません。かわりに、フェッチAPIと適切なHTTPリクエスト・メソッドを使用して、適切な操作を実行するためにリクエストをRESTサービスに送信します。このステップとともに、データ・プロバイダのmutate
メソッドを使用して、データ・プロバイダ・インスタンスを更新します。
ノート:
この後のステップで、具体的にRESTDataProvider
を参照していますが、この一般的なステップはRESTTreeDataProvider
にも適用できます。RESTツリー・データ・プロバイダに関するOracle JETクックブック・エントリのイベント・デモを表示して、RESTTreeDataProvider
を使用するCRUDタイプの機能の実装を確認します。Oracle JETクックブックのデモではモックRESTサーバーを使用するため、実際のRESTサービスでの操作やレスポンスが、クックブックのデモンストレーションとは異なる場合があります。
レコードの読取り
レコードを読み取るには、アプリのページでレコードを読み取るOracle JET要素を定義します。
次のサンプル・コードは、oj-table
要素と、dataprovider
を参照するdata
属性を使用してレコードの表を表示するhtml
ファイルの一部を示しています。この例では、table要素によってDepartment Id
、Department Name
などの列が作成されます。
<oj-table id="table" data="[[dataprovider]]"
columns='[{"headerText": "Department Id",
"field": "DepartmentId"},
{"headerText": "Department Name",
"field": "DepartmentName"},
{"headerText": "Location Id",
"field": "LocationId"},
{"headerText": "Manager Id",
"field": "ManagerId"}]'>
</oj-table>