リレーションシップ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つ作成する。
最初のオブジェクト:
分野 価値 ラベル できる複数形ラベル エイブルズ名前 できる2番目の対象物:
分野 価値 ラベル パン複数形ラベル パン屋名前 パン第三の目的:
分野 価値 ラベル チャーリー複数形ラベル チャーリーズ名前 チャーリー -
各オブジェクトドラフトに
名前フィールドを追加します。ラベル フィールド名 タイプ 必須 名前名前文章 ✔ -
以下の関係をableオブジェクトに追加します。
ラベル 関係名 タイプ 物体 ベイカーになれるパン職人になれる一対多 パン チャーリーにできるableToCharlie一対多 チャーリー
公開後は、以下の関係性APIを含むREST APIにアクセスできるようになります。
| オブジェクト | HTTPメソッド | HTTPエンドポイント | Javaメソッド |
|---|---|---|---|
| できる | 得る | /{ableId}/ableToBaker | getAbleAbleToBakerBakerPage |
| できる | 得る | /{ableId}/ableToCharlie | getAbleAbleToCharlieCharliePage |
| できる | 消去 | /{ableId}/ableToBaker/{bakerId} | deleteAbleAbleToBakerBaker |
| できる | 置く | /{ableId}/ableToBaker/{bakerId} | putAbleAbleToBakerBaker |
| できる | 消去 | /{ableId}/ableToCharlie/{charlieId} | deleteAbleAbleToCharlieCharlie |
| できる | 置く | /{ableId}/ableToCharlie/{charlieId} | putAbleAbleToCharlieCharlie |
| できる | 置く | /by-external-reference-code/{ableERC}/ableToBaker/{bakerERC} | putAbleAbleToBakerBaker |
| できる | 置く | /by-external-reference-code/{ableERC}/ableToCharlie/{charlieERC} | putAbleAbleToCharlieCharlie |
| チャーリー | 得る | /{charlieId}/ableToCharlie | getCharlieAbleToCharlieAblePage |
| チャーリー | 消去 | /{charlieId}/ableToCharlie/{ableId} | deleteCharlieAbleToCharlieAble |
| チャーリー | 置く | /{charlieId}/ableToCharlie/{ableId} | putCharlieAbleToCharlieAble |
| チャーリー | 置く | /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を使用して、オブジェクトのエントリを追加し、それらの関係を管理します。
-
curlフォルダーのliferay-f9m2に移動します。cd liferay-f9m2/curl -
各オブジェクトに対して 3 つのエントリを作成するには、
POSTコマンドを実行します。 これらのエントリには、[オブジェクト名]-[番号]という命名パターンに従った事前定義された外部参照コード (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これは、該当するエントリをパン屋のエントリと関連付け、応答を出力します。
{ ... "externalReferenceCode" : "baker-one"、 "id" : 42427、 ... "名前" : "ベイカー 1"、 "r_ableToBaker_c_ableId" : 42421、 "r_ableToBaker_c_ableERC" : "able-one" } { ... "externalReferenceCode" : "baker-two"、 "id" : 42429、 ... "名前" : "ベイカー 2"、 "r_ableToBaker_c_ableId" : 42421、 "r_ableToBaker_c_ableERC" : "able-one" } { ... "externalReferenceCode" : "baker-three"、 "id" : 42431、 ... "名前" : "ベイカー 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、 ... "名前" : "ベイカー 2"、 "r_ableToBaker_c_ableId" : 42421、 "r_ableToBaker_c_ableERC" : "able-one" }, { ... "externalReferenceCode" : "baker-one"、 "id" : 42427、 ... "名前" : "ベイカー 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、 ... "名前" : "チャーリー 1" } { ... "externalReferenceCode" : "charlie-two"、 "id" : 42435、 ... "名前" : "チャーリー 2" } { ... "externalReferenceCode" : "charlie-three"、 "id" : 42437、 ... "名前" : "チャーリー 3" } -
Charlies_GET_AbleToCharlie_ByIdをcharlie-oneの ID で実行します。./Charlies_GET_AbleToCharlie_ById.sh {charlie-entry-id}これは、指定されたチャーリーのエントリに関連するすべての有効なエントリのリストを返します。
{ ... "アイテム" : [ { ... "externalReferenceCode" : "able-one"、 "id" : 42421、 ... "名前" : "エイブル 1" } ], "最終ページ" : 1, "ページ" : 1, "ページサイズ" : 1、 "合計数" : 1 } -
Charlies_PUT_AbleToCharlie_ByExternalReferenceCodeをcharlie-oneおよびable-twoERC と共に実行します。./Charlies_PUT_AbleToCharlie_ByExternalReferenceCode.sh charlie-one able-twoこれは、チャーリーのエントリを別の有能なエントリに関連付けるものです。
{ ... "externalReferenceCode" : "able-two"、 "id" : 42423、 ... "名前" : "エイブル 2" } -
Charlies_GET_AbleToCharlie_ByIdをcharlie-oneの ID で実行し、関連する able エントリが 2 つあることを確認します。./Charlies_GET_AbleToCharlie_ById.sh {charlie-entry-id}{ ... "アイテム" : [ { ... "externalReferenceCode" : "able-two"、 "id" : 42423、 ... "名前" : "エイブル 2" }, { ... "externalReferenceCode" : "able-one"、 "id" : 42421、 ... "名前" : "エイブル 1" } ], "最終ページ" : 1, "ページ" : 1, "ページサイズ" : 2、 "合計数" : 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、 ... "名前" : "チャーリー 1" }, { ... "externalReferenceCode" : "charlie-two"、 "id" : 42435、 ... "名前" : "チャーリー 2" }, { ... "externalReferenceCode" : "charlie-three"、 "id" : 42437、 ... "名前" : "チャーリー 3" } ], "名前" : "エイブル 1", "ableToBaker" : [ { ... "externalReferenceCode" : "baker-one"、 "id" : 42427、 ... "名前" : "ベイカー 1"、 "r_ableToBaker_c_ableId" : 42421、 "r_ableToBaker_c_ableERC" : "able-one" }, { ... "externalReferenceCode" : "baker-two"、 "id" : 42429、 ... "名前" : "ベイカー 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"