関連REST APIの利用

関連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つのカスタムオブジェクトを作成 します。

  1. グローバルメニュー(グローバルメニュー)を開き、 [コントロールパネル] タブで [オブジェクト] をクリックします。

  2. 3つのオブジェクトドラフトを作成します。

    第一オブジェクト:

    項目
    ラベル Able
    複数形のラベル Ables
    名前 Able

第二オブジェクト:

  | 項目 | 値 |
  | :--- | :--- |
  | ラベル | `Baker` |
  | 複数形のラベル | `Bakers` |
  | 名前 | `Baker` |

第三オブジェクト:

  | 項目 | 値 |
  | :--- | :--- |
  | ラベル | `Charlie` |
  | 複数形のラベル | `Charlies` |
  | 名前 | `Charlie` |
  1. 各オブジェクトドラフトに以下のnameフィールドを追加します。

    ラベル 項目名 種類 必須
    Name name Text
  2. これらの関連をableオブジェクトに追加します。

    ラベル 関連名 タイプ オブジェクト
    Able to Baker ableToBaker 1対多 Baker
    Able to Charlie ableToCharlie 1対多 Charlie
  3. 各オブジェクトを 公開 します。

公開後、以下の関連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
tip

サイトオブジェクトと会社オブジェクトの両方に対して生成される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を使用して、オブジェクトのエントリーを追加し、その関連を管理します。

  1. liferay-f9m2プロジェクト内のcurlフォルダに移動します。

    cd liferay-f9m2/curl
    
  2. POSTコマンドを実行し、各オブジェクトに3つのエントリーを作成します。 これらのエントリーは、 [objectname]-[number]の命名パターンに従って、あらかじめ定義された外部参照コード(ERC)を持っています(例: able-one)。

    ./Able_POST_Batch.sh
    
    ./Baker_POST_Batch.sh
    
    ./Charlie_POST_Batch.sh
    
  3. Able_PUT_AbleToBaker_ByExternalReferenceCodeable-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"
    }
    
  4. Able_DELETE_AbleToBaker_ByIdに、able-onebaker-threeの 2 つの ID を付けて実行します。

    ./Able_DELETE_AbleToBaker_ById.sh {able-entry-id} {baker-entry-id}
    

    これにより、エントリーの関連付けが解除されます。

  5. 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"
    }
    
  6. Able_PUT_AbleToCharlie_ByExternalReferenceCodeable-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"
    }
    
  7. Charlie_GET_AbleToCharlie_ByIdcharlie-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
    }
    
  8. Charlie_PUT_AbleToCharlie_ByExternalReferenceCodecharlie-one および able-two ERC で実行します。

    ./Charlie_PUT_AbleToCharlie_ByExternalReferenceCode.sh charlie-one able-two
    

    これは、charlieエントリーを別のableエントリーに関連付けるものです。

    {
      ...
      "externalReferenceCode" : "able-two",
      "id" : 42423,
      ...
      "name" : "Able 2"
    }
    
  9. Charlie_GET_AbleToCharlie_ByIdcharlie-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
    }
    
  10. Able_GET_ByIdable-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"

追加情報