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>