REST APIでネストしたフィールドの使用

REST APIでネストしたフィールドの使用

カスタムオブジェクトAPIでは、nestedFieldsパラメーターを使用すると、1つのGET要求で複数レベルの関連オブジェクトを返すことができます。 また、nestedFieldsDepthパラメーターを使用して、クエリに含まれるオブジェクトエントリーの深さ(0-5)を決定できます。 ここでは、cURLスクリプトを使用して、ネストされたフィールドを持つオブジェクトAPIを呼び出すことになります。

tip

ネストされたフィールドは、通常、複数のリクエストを必要とする情報を取得するのに便利な方法です。 こうすることで、関連するエンティティIDで新たにリクエストを送ることなく、エンティティ自身から関連するエンティティの全情報を得られます。

先に進む前に、新しい Liferay DXP/Portal 7.4インスタンスを セットアップ し、提供されたチュートリアルコードを 準備 します。

Liferayインスタンスのセットアップ

新しいLiferay インスタンスを起動し、以下を実行します。

docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.55-ga55。

http://localhost:8080でLiferayへのサインインします。 メールアドレス[email protected]_とパスワード_test_を使用してください。 プロンプトが表示されたら、パスワードを _learn_に変更します。

次に、下記の手順で、3つのオブジェクトを作成します。

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

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

    第一オブジェクト:

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

第二オブジェクト:

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

第三オブジェクト:

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

    ラベル 項目名 種類 必須
    Name name Text
  2. 以下の関連を定義します。

    Ableの場合:

    ラベル リレーション名 種類 オブジェクト
    Able to Baker ableToBaker 1対多 Baker

    Bakerの場合:

    ラベル リレーション名 種類 オブジェクト
    Baker to Charlie bakerToCharlie 1対多 Charlie
  3. 各オブジェクトを 公開 します。

公開後は、ヘッドレスAPIで各オブジェクトにアクセスすることができます。

サンプルコードを準備する

以下のコマンドを実行して、提供されたサンプルコードをダウンロードし、解凍してください。

curl https://resources.learn.liferay.com/dxp/latest/ja/building-applications/objects/objects-tutorials/using-apis/liferay-w4s7.zip -O
unzip liferay-w4s7.zip

サンプルコードには、各オブジェクトに対するPOSTコマンドとCharlieに対するGETコマンドが含まれています。

tip

サイトオブジェクトと会社オブジェクトの両方に対して生成されるAPIの完全なリストについては、オブジェクトのヘッドレスフレームワークの統合を参照してください。 カスタムオブジェクトAPIは、LiferayAPIエクスプローラーを通して[server]:[port]/o/api (例:localhost:8080/o/api)で表示およびテストできます。 これらは、*[RESTアプリケーション]*の下に表示されます。

サンプルコードを使用する

次の手順に従って、関連するオブジェクトエントリーを追加し、照会します。

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

    cd liferay-p8n6/curl
    
  2. Able_POST_ToCompanyを実行し、Ableエントリーを作成します。

    ./Able_POST_ToCompany.sh
    

    次のPOSTコマンドで使用するために、最初のエントリーのIDをコピーします。

    {
      "id" : 41969,
      ...
      "name" : "Able 1"
    }
    
    {
      "id" : 41971,
      ...
      "name" : "Able 2"
    }
    
    {
      "id" : 41973,
      ...
      "name" : "Able 3"
    }
    
  3. AbleのエントリーIDをパラメータとして、Baker_POST_ToCompanyを実行します。

    ./Baker_POST_ToCompany.sh {able-entry-id}
    

    これにより、指定されたAbleエントリーに関連するBakerエントリーが作成されます。 次のPOSTコマンドで使用するために、最初のBakerエントリーのIDをコピーします。

    {
      "id" : 41975,
      ...
      "name" : "Baker 1"
      "r_ableToBaker_c_ableId" : 41969
    }
    
    {
      "id" : 41977,
      ...
      "name" : "Baker 2"
      "r_ableToBaker_c_ableId" : 41969
    }
    
    {
      "id" : 41979,
      ...
      "name" : "Baker 3"
      "r_ableToBaker_c_ableId" : 41969
    }
    
  4. BakerエントリーIDをパラメータとして、Charlie_POST_ToCompanyを実行します。

    ./Charlie_POST_ToCompany.sh {baker-entry-id}
    

    これにより、直前のBakerエントリーに関連するCharlieエントリーが作成されます。 次のGETコマンドで使用するために、最初のエントリーのIDをコピーします。

    {
      "id" : 41981,
      ...
      "name" : "Charlie 1",
      "r_bakerToCharlie_c_bakerId" : 41975
    }
    
    {
      "id" : 41983,
      ...
      "name" : "Charlie 2",
      "r_bakerToCharlie_c_bakerId" : 41975
    }
    
    {
      "id" : 41985,
      ...
      "name" : "Charlie 3",
      "r_bakerToCharlie_c_bakerId" : 41975
    }
    
  5. CharlieエントリーIDをパラメータとして、Charlie_GET_ByIdを実行します。

    ./Charlie_GET_ById.sh [charlie-entry-id]
    

    これは、ネストされたフィールドを使用してエントリーに照会し、関連するオブジェクトの3つのレベルすべてについてスキーマを返します。

    {
      "r_bakerToCharlie_c_baker" : {
        ...
        "id" : 41975,
        ...
        "r_ableToBaker_c_able" : {
          ...
          "id" : 41969,
          ...
          "name" : "Able 1"
        },
        "name" : "Baker 1",
        "r_ableToBaker_c_ableId" : 41969
      },
      "name" : "Charlie 1",
      "r_bakerToCharlie_c_bakerId" : 41975
    }
    

GETスクリプトを調べる

curl \
	"http://localhost:8080/o/c/charlies/${1}/?nestedFields=able,baker&nestedFieldsDepth=2" \
	-u "[email protected]:learn"

提供されたGETメソッドは、nestedFieldsnestedFieldsDepthパラメーターを持つURLを呼び出します。

nestedFields:クエリーに含まれるエントリーの種類を決定します(例: able,baker)。

nestedFieldsDepth:取り込みたいエントリーの深さを決定します。0〜5の間で設定可能です。

追加情報