REST APIでネストしたフィールドの使用
カスタムオブジェクトAPIでは、nestedFields
パラメーターを使用すると、1つのGET要求で複数レベルの関連オブジェクトを返すことができます。 また、nestedFieldsDepth
パラメーターを使用して、クエリに含まれるオブジェクトエントリーの深さ(0-5
)を決定できます。 ここでは、cURLスクリプトを使用して、ネストされたフィールドを持つオブジェクトAPIを呼び出すことになります。
ネストされたフィールドは、通常、複数のリクエストを必要とする情報を取得するのに便利な方法です。 こうすることで、関連するエンティティIDで新たにリクエストを送ることなく、エンティティ自身から関連するエンティティの全情報を得られます。
先に進む前に、新しい Liferay DXP/Portal 7.4インスタンスを セットアップ し、提供されたチュートリアルコードを 準備 します。
Liferayインスタンスのセットアップ
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.55-ga55。
http://localhost:8080でLiferayへのサインインします。 メールアドレス[email protected]_とパスワード_test_を使用してください。 プロンプトが表示されたら、パスワードを _learn_に変更します。
次に、下記の手順で、3つのオブジェクトを作成します。
グローバルメニュー(
)を開き、 [コントロールパネル] タブで [オブジェクト] をクリックします。
3つのオブジェクトドラフトを作成します。
第一オブジェクト:
項目 値 ラベル Able
複数形のラベル Ables
名前 Able
第二オブジェクト:
| 項目 | 値 |
| :--- | :--- |
| ラベル | `Baker` |
| 複数形のラベル | `Bakers` |
| 名前 | `Baker` |
第三オブジェクト:
| 項目 | 値 |
| :--- | :--- |
| ラベル | `Charlie` |
| 複数形のラベル | `Charlies` |
| 名前 | `Charlie` |
各オブジェクトドラフトに以下のテキストフィールドを追加します。
ラベル 項目名 種類 必須 Name
name
Text ✔ 以下の関連を定義します。
Ableの場合:
ラベル リレーション名 種類 オブジェクト Able to Baker
ableToBaker
1対多 Baker Bakerの場合:
ラベル リレーション名 種類 オブジェクト Baker to Charlie
bakerToCharlie
1対多 Charlie 各オブジェクトを 公開 します。
公開後は、ヘッドレスAPIで各オブジェクトにアクセスすることができます。
サンプルコードを準備する
以下のコマンドを実行して、提供されたサンプルコードをダウンロードし、解凍してください。
curl https://resources.learn.liferay.com/dxp/latest/ja/building-applications/objects/objects-tutorials/using-apis/liferay-w4s7.zip -O
unzip liferay-w4s7.zip
サンプルコードには、各オブジェクトに対するPOSTコマンドとCharlie
に対するGETコマンドが含まれています。
サイトオブジェクトと会社オブジェクトの両方に対して生成されるAPIの完全なリストについては、オブジェクトのヘッドレスフレームワークの統合を参照してください。 カスタムオブジェクトAPIは、LiferayAPIエクスプローラーを通して[server]:[port]/o/api
(例:localhost:8080/o/api
)で表示およびテストできます。 これらは、*[RESTアプリケーション]*の下に表示されます。
サンプルコードを使用する
次の手順に従って、関連するオブジェクトエントリーを追加し、照会します。
liferay-w4s7
プロジェクトのcurl
フォルダに移動します。cd liferay-p8n6/curl
Able_POST_ToCompany
を実行し、Able
エントリーを作成します。./Able_POST_ToCompany.sh
次のPOSTコマンドで使用するために、最初のエントリーのIDをコピーします。
{ "id" : 41969, ... "name" : "Able 1" } { "id" : 41971, ... "name" : "Able 2" } { "id" : 41973, ... "name" : "Able 3" }
Able
のエントリーIDをパラメータとして、Baker_POST_ToCompany
を実行します。./Baker_POST_ToCompany.sh {able-entry-id}
これにより、指定された
Able
エントリーに関連するBaker
エントリーが作成されます。 次のPOSTコマンドで使用するために、最初のBakerエントリーのIDをコピーします。{ "id" : 41975, ... "name" : "Baker 1" "r_ableToBaker_c_ableId" : 41969 } { "id" : 41977, ... "name" : "Baker 2" "r_ableToBaker_c_ableId" : 41969 } { "id" : 41979, ... "name" : "Baker 3" "r_ableToBaker_c_ableId" : 41969 }
Baker
エントリーIDをパラメータとして、Charlie_POST_ToCompany
を実行します。./Charlie_POST_ToCompany.sh {baker-entry-id}
これにより、直前の
Baker
エントリーに関連するCharlie
エントリーが作成されます。 次のGETコマンドで使用するために、最初のエントリーのIDをコピーします。{ "id" : 41981, ... "name" : "Charlie 1", "r_bakerToCharlie_c_bakerId" : 41975 } { "id" : 41983, ... "name" : "Charlie 2", "r_bakerToCharlie_c_bakerId" : 41975 } { "id" : 41985, ... "name" : "Charlie 3", "r_bakerToCharlie_c_bakerId" : 41975 }
Charlie
エントリーIDをパラメータとして、Charlie_GET_ById
を実行します。./Charlie_GET_ById.sh [charlie-entry-id]
これは、ネストされたフィールドを使用してエントリーに照会し、関連するオブジェクトの3つのレベルすべてについてスキーマを返します。
{ "r_bakerToCharlie_c_baker" : { ... "id" : 41975, ... "r_ableToBaker_c_able" : { ... "id" : 41969, ... "name" : "Able 1" }, "name" : "Baker 1", "r_ableToBaker_c_ableId" : 41969 }, "name" : "Charlie 1", "r_bakerToCharlie_c_bakerId" : 41975 }
GETスクリプトを調べる
curl \
"http://localhost:8080/o/c/charlies/${1}/?nestedFields=able,baker&nestedFieldsDepth=2" \
-u "[email protected]:learn"
提供されたGETメソッドは、nestedFields
と nestedFieldsDepth
パラメーターを持つURLを呼び出します。
nestedFields
:クエリーに含まれるエントリーの種類を決定します(例: able,baker
)。
nestedFieldsDepth
:取り込みたいエントリーの深さを決定します。0〜5の間で設定可能です。