関連REST APIの利用
Liferay 7.4 U70+/GA70+
カスタムオブジェクトやシステムオブジェクトに関連を追加すると、Liferayはそれらの関連にアクセスするためのRESTエンドポイントを生成します。 エントリーの関連付けや関連付けの解除、エントリーの関連エントリーを返すことができます。 これらのエンドポイントは、1対多の関連では親オブジェクトに、多対多の関連では両方のオブジェクトに追加されます。
先に進むには、 新しいLiferay 7.4インスタンスを セットアップし、 提供されているチュートリアルコードを 準備します。 その後、スクリプトを実行してオブジェクトエントリーを作成し、互いの関連を管理します。
Liferayインスタンスのセットアップ
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132
http://localhost:8080 で Liferay にサインインしてください。 メールアドレス test@liferay.com とパスワード test を使用してください。 プロンプトが表示されたら、パスワードを learnに変更します。
次に、関連する3つのカスタム・オブジェクトを作成する:
-
グローバルメニュー(
)を開き、[コントロールパネル]タブに移動し、[オブジェクト]をクリックします。 -
3つのオブジェクトドラフトを作成します。
最初のオブジェクト:
項目 値 ラベル Able複数形のラベル Ables名前 Able2番目の対象物:
項目 値 ラベル Baker複数形のラベル Bakers名前 Baker第三の目的:
項目 値 ラベル Charlie複数形のラベル Charlies名前 Charlie -
各オブジェクトドラフトに
名前フィールドを追加します。ラベル 項目名 種類 必須 Namenameテキストボックス ✔ -
以下の関係をableオブジェクトに追加します。
ラベル リレーション名 種類 オブジェクト Able to BakerableToBaker1 対多 パン Able to CharlieableToCharlie1 対多 チャーリー
公開後は、以下の関係性APIを含むREST APIにアクセスできるようになります。
| オブジェクト | HTTPメソッド | HTTPエンドポイント | Javaメソッド |
|---|---|---|---|
| できる | GET | /{ableId}/ableToBaker | getAbleAbleToBakerBakerPage |
| できる | GET | /{ableId}/ableToCharlie | getAbleAbleToCharlieCharliePage |
| できる | DELETE | /{ableId}/ableToBaker/{bakerId} | deleteAbleAbleToBakerBaker |
| できる | PUT | /{ableId}/ableToBaker/{bakerId} | putAbleAbleToBakerBaker |
| できる | DELETE | /{ableId}/ableToCharlie/{charlieId} | deleteAbleAbleToCharlieCharlie |
| できる | PUT | /{ableId}/ableToCharlie/{charlieId} | putAbleAbleToCharlieCharlie |
| できる | PUT | /by-external-reference-code/{ableERC}/ableToBaker/{bakerERC} | putAbleAbleToBakerBaker |
| できる | PUT | /by-external-reference-code/{ableERC}/ableToCharlie/{charlieERC} | putAbleAbleToCharlieCharlie |
| チャーリー | GET | /{charlieId}/ableToCharlie | getCharlieAbleToCharlieAblePage |
| チャーリー | DELETE | /{charlieId}/ableToCharlie/{ableId} | deleteCharlieAbleToCharlieAble |
| チャーリー | PUT | /{charlieId}/ableToCharlie/{ableId} | putCharlieAbleToCharlieAble |
| チャーリー | PUT | /by-external-reference-code/{ableERC}/ableToCharlie/{charlieERC} | putCharlieAbleToCharlieAble |
サイトおよび会社オブジェクト用に生成された API の完全なリストについては、 オブジェクト ヘッドレス フレームワーク統合 を参照してください。 Liferay API Explorer を介してカスタムオブジェクト API を表示およびテストできます。 [server]:[port]/o/api (例: localhost:8080/o/api)。 REST アプリケーション をクリックして、API を選択します。
サンプルコードを準備する
以下のコマンドを実行し、提供されたサンプルコードをダウンロードし、解凍してください:
curl https://resources.learn.liferay.com/examples/liferay-f9m2.zip -O
unzip liferay-f9m2.zip
サンプルコードには、各オブジェクトのエントリーを作成し、その関連APIを使用するためのコマンドが含まれています。
サンプルコードを使用する
REST APIを使用して、オブジェクトのエントリーを追加し、その関連を管理します。
-
liferay-f9m2プロジェクト内のcurlフォルダに移動します。cd liferay-f9m2/curl -
POSTコマンドを実行し、各オブジェクトに3つのエントリーを作成します。 これらのエントリーは、[objectname]-[number]の命名パターンに従って、あらかじめ定義された外部参照コード(ERC)を持っています(例:able-one)。./Ables_POST_Batch.sh./Bakers_POST_Batch.sh./Charlies_POST_Batch.sh -
Ables_PUT_AbleToBakers_ByExternalReferenceCodeをable-oneERC と 3 つの baker ERC すべてで実行します。./Ables_PUT_AbleToBakers_ByExternalReferenceCode.sh able-one baker-one baker-two baker-threeこれにより、ableエントリとbakerエントリが関連付けられ、そのレスポンスが出力されます。
{ ... "externalReferenceCode" : "baker-one", "id" : 42427, ... "name" : "Baker 1", "r_ableToBaker_c_ableId" : 42421, "r_ableToBaker_c_ableERC" : "able-one" } { ... "externalReferenceCode" : "baker-two", "id" : 42429, ... "name" : "Baker 2", "r_ableToBaker_c_ableId" : 42421, "r_ableToBaker_c_ableERC" : "able-one" } { ... "externalReferenceCode" : "baker-three", "id" : 42431, ... "name" : "Baker 3", "r_ableToBaker_c_ableId" : 42421, "r_ableToBaker_c_ableERC" : "able-one" } -
Ables_DELETE_AbleToBakers_ByIdを 2 つの ID で実行します。1 つはable-oneの ID、もう 1 つはbaker-threeの ID です。./Ables_DELETE_AbleToBaker_ById.sh {able-entry-id} {baker-entry-id}これにより、エントリーの関連付けが解除されます。
-
同じアブル ID を使用して
Ables_GET_AbleToBaker_ByIdを実行して、それらがもはや関連付けられていないことを確認します。./Ables_GET_AbleToBaker_ById.sh {able-entry-id}{ ... "externalReferenceCode" : "baker-two", "id" : 42429, ... "name" : "Baker 2", "r_ableToBaker_c_ableId" : 42421, "r_ableToBaker_c_ableERC" : "able-one" }, { ... "externalReferenceCode" : "baker-one", "id" : 42427, ... "name" : "Baker 1", "r_ableToBaker_c_ableId" : 42421, "r_ableToBaker_c_ableERC" : "able-one" } -
Ables_PUT_AbleToCharlie_ByExternalReferenceCodeをable-oneERC と 3 つの charlie ERC すべてで実行します。./Ables_PUT_AbleToCharlie_ByExternalReferenceCode.sh able-one charlie-one charlie-two charlie-threeこれにより、ableエントリーとcharlieエントリーが関連付けられ、そのレスポンスが出力されます。
{ ... "externalReferenceCode" : "charlie-one", "id" : 42433, ... "name" : "Charlie 1" } { ... "externalReferenceCode" : "charlie-two", "id" : 42435, ... "name" : "Charlie 2" } { ... "externalReferenceCode" : "charlie-three", "id" : 42437, ... "name" : "Charlie 3" } -
Charlies_GET_AbleToCharlie_ByIdをcharlie-oneの ID で実行します。./Charlies_GET_AbleToCharlie_ById.sh {charlie-entry-id}指定されたcharlieエントリーに関連するすべてのableエントリーのリストを返します。
{ ... "items" : [ { ... "externalReferenceCode" : "able-one", "id" : 42421, ... "name" : "Able 1" } ], "lastPage" : 1, "page" : 1, "pageSize" : 1, "totalCount" : 1 } -
Charlies_PUT_AbleToCharlie_ByExternalReferenceCodeをcharlie-oneおよびable-twoERC と共に実行します。./Charlies_PUT_AbleToCharlie_ByExternalReferenceCode.sh charlie-one able-twoこれは、charlieエントリーを別のableエントリーに関連付けるものです。
{ ... "externalReferenceCode" : "able-two", "id" : 42423, ... "name" : "Able 2" } -
Charlies_GET_AbleToCharlie_ByIdをcharlie-oneの ID で実行し、関連する able エントリが 2 つあることを確認します。./Charlies_GET_AbleToCharlie_ById.sh {charlie-entry-id}{ ... "items" : [ { ... "externalReferenceCode" : "able-two", "id" : 42423, ... "name" : "Able 2" }, { ... "externalReferenceCode" : "able-one", "id" : 42421, ... "name" : "Able 1" } ], "lastPage" : 1, "page" : 1, "pageSize" : 2, "totalCount" : 2 } -
Ables_GET_ByIdをable-oneの ID で実行します。./Ables_GET_ById.sh {able-entry-id}このコマンドは、
nestedFieldsパラメーターを使用して、関連するすべての baker および charlie エントリーを返します。{ "externalReferenceCode" : "able-one", "id" : 42421, ... "ableToCharlie" : [ { ... "externalReferenceCode" : "charlie-one", "id" : 42433, ... "name" : "Charlie 1" }, { ... "externalReferenceCode" : "charlie-two", "id" : 42435, ... "name" : "Charlie 2" }, { ... "externalReferenceCode" : "charlie-three", "id" : 42437, ... "name" : "Charlie 3" } ], "name" : "Able 1", "ableToBaker" : [ { ... "externalReferenceCode" : "baker-one", "id" : 42427, ... "name" : "Baker 1", "r_ableToBaker_c_ableId" : 42421, "r_ableToBaker_c_ableERC" : "able-one" }, { ... "externalReferenceCode" : "baker-two", "id" : 42429, ... "name" : "Baker 2", "r_ableToBaker_c_ableId" : 42421, "r_ableToBaker_c_ableERC" : "able-one" } ] }nestedFields を使用して関連エントリをクエリする を参照して、
nestedFieldsパラメーターの詳細を確認してください。
コードを調べる
外部参照コードを使用してAbleをCharlieに渡す
curl \
"http://localhost:8080/o/c/charlies/by-external-reference-code/${1}/ableToCharlie/${2}" \
--header "Content-Type: application/json" \
--request "PUT" \
--user "test@liferay.com:learn"
IDでチャーリーのためにAbleを手に入れよう
curl \
"http://localhost:8080/o/c/charlies/${1}/ableToCharlie" \
--header "Content-Type: application/json" \
--user "test@liferay.com:learn"
IDでベイカーに削除可能
curl \
"http://localhost:8080/o/c/ables/${1}/ableToBaker/${2}" \
--header "Content-Type: application/json" \
--request "DELETE" \
--user "test@liferay.com:learn"
IDで関連するパン屋やチャーリーズからAbleを取得
curl \
"http://localhost:8080/o/c/ables/${1}/?nestedFields=ableToBaker,ableToCharlie" \
--user "test@liferay.com:learn"