関連REST APIの利用
ライフレイ 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名前 Baker3番目のオブジェクト:
項目 値 ラベル 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 の [server]:[port]/o/api (例: localhost:8080/o/api)からカスタムオブジェクト 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 (able-oneの ID と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 で実行し、関連する 2 つの able エントリがあることを確認します。./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 を使用して関連エントリを照会する を参照してください。
コードを調べる
Charlies_PUT_AbleToCharlie_ByExternalReferenceCode
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"
Charlies_GET_AbleToCharlie_ById
curl \
"http://localhost:8080/o/c/charlies/${1}/ableToCharlie" \
--header "Content-Type: application/json" \
--user "test@liferay.com:learn"
Ables_DELETE_AbleToBaker_ById
curl \
"http://localhost:8080/o/c/ables/${1}/ableToBaker/${2}" \
--header "Content-Type: application/json" \
--request "DELETE" \
--user "test@liferay.com:learn"
Ables_GET_ById.sh
curl \
"http://localhost:8080/o/c/ables/${1}/?nestedFields=ableToBaker,ableToCharlie" \
--user "test@liferay.com:learn"