関連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.75-ga75。
http://localhost:8080でLiferayへのサインインします。 メールアドレス[email protected]_とパスワード_test_を使用してください。 プロンプトが表示されたら、パスワードを _learn_に変更します。
次に、関連する3つのカスタムオブジェクトを作成 します。
グローバルメニュー(
)を開き、 [コントロールパネル] タブで [オブジェクト] をクリックします。
3つのオブジェクトドラフトを作成します。
第一オブジェクト:
項目 値 ラベル Able
複数形のラベル Ables
名前 Able
第二オブジェクト:
| 項目 | 値 |
| :--- | :--- |
| ラベル | `Baker` |
| 複数形のラベル | `Bakers` |
| 名前 | `Baker` |
第三オブジェクト:
| 項目 | 値 |
| :--- | :--- |
| ラベル | `Charlie` |
| 複数形のラベル | `Charlies` |
| 名前 | `Charlie` |
各オブジェクトドラフトに以下の
name
フィールドを追加します。ラベル 項目名 種類 必須 Name
name
Text ✔ これらの関連をableオブジェクトに追加します。
ラベル 関連名 タイプ オブジェクト Able to Baker
ableToBaker
1対多 Baker Able to Charlie
ableToCharlie
1対多 Charlie 各オブジェクトを 公開 します。
公開後、以下の関連APIを含む、それらのREST APIにアクセスできます。
オブジェクト | HTTPメソッド | HTTPエンドポイント | Java メソッド |
---|---|---|---|
Able | GET | /{ableId}/ableToBaker |
getAbleAbleToBakerBakerPage |
Able | GET | /{ableId}/ableToCharlie |
getAbleAbleToCharlieCharliePage |
Able | DELETE | /{ableId}/ableToBaker/{bakerId} |
deleteAbleAbleToBakerBaker |
Able | PUT | /{ableId}/ableToBaker/{bakerId} |
putAbleAbleToBakerBaker |
Able | DELETE | /{ableId}/ableToCharlie/{charlieId} |
deleteAbleAbleToCharlieCharlie |
Able | PUT | /{ableId}/ableToCharlie/{charlieId} |
putAbleAbleToCharlieCharlie |
Able | PUT | /by-external-reference-code/{ableERC}/ableToBaker/{bakerERC} |
putAbleAbleToBakerBaker |
Able | PUT | /by-external-reference-code/{ableERC}/ableToCharlie/{charlieERC} |
putAbleAbleToCharlieCharlie |
Charlie | GET | /{charlieId}/ableToCharlie |
getCharlieAbleToCharlieAblePage |
Charlie | DELETE | /{charlieId}/ableToCharlie/{ableId} |
deleteCharlieAbleToCharlieAble |
Charlie | PUT | /{charlieId}/ableToCharlie/{ableId} |
putCharlieAbleToCharlieAble |
Charlie | PUT | /by-external-reference-code/{ableERC}/ableToCharlie/{charlieERC} |
putCharlieAbleToCharlieAble |
サイトオブジェクトと会社オブジェクトの両方に対して生成されるAPIの完全なリストについては、オブジェクトのヘッドレスフレームワークの統合 を参照してください。 カスタムオブジェクトAPIは、LiferayAPIエクスプローラーを通して[server]:[port]/o/api
(例:localhost:8080/o/api
)で表示およびテストできます。 RESTアプリケーションをクリックし、APIを選択します。
サンプルコードを準備する
以下のコマンドを実行し、提供されたサンプルコードをダウンロードし、解凍してください:
curl https://resources.learn.liferay.com/dxp/latest/en/building-applications/objects/objects-tutorials/using-apis/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
)。./Able_POST_Batch.sh
./Baker_POST_Batch.sh
./Charlie_POST_Batch.sh
Able_PUT_AbleToBaker_ByExternalReferenceCode
をable-one
ERC と 3 つの baker ERC すべてで実行します。./Able_PUT_AbleToBaker_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" }
Able_DELETE_AbleToBaker_ById
に、able-one
とbaker-three
の 2 つの ID を付けて実行します。./Able_DELETE_AbleToBaker_ById.sh {able-entry-id} {baker-entry-id}
これにより、エントリーの関連付けが解除されます。
Able_GET_AbleToBaker_ById
を同じable IDで実行し、両者の関連性がなくなったことを確認します。./Able_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" }
Able_PUT_AbleToCharlie_ByExternalReferenceCode
をable-one
ERC と 3 つの charlie ERC すべてで実行します。./Able_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" }
Charlie_GET_AbleToCharlie_ById
にcharlie-one
のIDを付けて実行します。./Charlie_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 }
Charlie_PUT_AbleToCharlie_ByExternalReferenceCode
をcharlie-one
およびable-two
ERC で実行します。./Charlie_PUT_AbleToCharlie_ByExternalReferenceCode.sh charlie-one able-two
これは、charlieエントリーを別のableエントリーに関連付けるものです。
{ ... "externalReferenceCode" : "able-two", "id" : 42423, ... "name" : "Able 2" }
Charlie_GET_AbleToCharlie_ById
をcharlie-one
のIDで実行し、関連する2つのableエントリーが存在することを確認します。./Charlie_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 }
Able_GET_ById
にable-one
のIDを付けて実行します。./Able_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
パラメーターの詳細については、 REST APIでネストしたフィールドの使用 を参照してください。
コードを調べる
Charlie_PUT_AbleToCharlie_ByExternalReferenceCode
curl \
-H "Content-Type: application/json" \
-X PUT \
"http://localhost:8080/o/c/charlies/by-external-reference-code/${1}/ableToCharlie/${2}" \
-u "[email protected]:learn"
Charlie_GET_AbleToCharlie_ById
curl -X 'GET' \
"http://localhost:8080/o/c/charlies/${1}/ableToCharlie" \
-H "Content-Type: application/json" \
-u "[email protected]:learn"
Able_DELETE_AbleToBaker_ById
curl -X 'DELETE' \
"http://localhost:8080/o/c/ables/${1}/ableToBaker/${2}" \
-H "Content-Type: application/json" \
-u "[email protected]:learn"
Able_GET_ById.sh
curl \
"http://localhost:8080/o/c/ables/${1}/?nestedFields=ableToBaker,ableToCharlie" \
-u "[email protected]:learn"