Custom Object APIs
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

ネストされたフィールドを使用して関連エントリをクエリする

Liferay 7.4 U69+/GA69+

nestedFields パラメータは、単一の GET リクエストで複数のレベルの関連オブジェクトエントリを返します。 nestedFields パラメーターに、クエリに含めるリレーションシップ名を渡します。各リレーションシップはカンマで区切ります。 nestedFields=[firstObjectRelationship],[secondObjectRelationship]。 関係が複数のレベルにまたがる場合は、 nestedFieldsDepth パラメーターを必要な深さに設定します。 最大 5 レベルまで含めることができます (例: nestedFieldsDepth=5)。

警告

検索 パラメータ を使用して nestedFields の複数レベルを検索すると、パフォーマンスに影響があり、深さのレベルが増えるごとに悪化します。 関連オブジェクトの複数階層を検索するには、クエリを複数のリクエストに分割し、各クエリには1つの関係のみを含めるようにします。 このアプローチにより、パフォーマンス低下の連鎖を回避できます。

ヒント

nestedFields パラメータは、関連するエントリを持つエントリを取得することでリクエストを最適化します。そうしないと、複数のリクエストが必要になります。 関連するエントリのみを返すために、Liferay は専用の リレーションシップ API を提供します。 概要については、 リレーションシップ REST API の使用 を参照してください。

続行するには、新しいLiferay 7.4インスタンスをセットアップし、提供されたチュートリアルコードを準備します。 次に、 スクリプト を実行して関連するエントリを作成し、 nestedFields パラメータを使用してクエリを実行します。

注記

現在、システムオブジェクトとの1対多リレーションシップの 多 側でカスタムオブジェクトを使用する場合、ネストされたフィールドまたはリレーションシップへのアクセスは利用できません。 データの取得方法を計画する際には、この点を念頭に置いてください。

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つのオブジェクト定義を作成し、それらを関連付けます。

  1. グローバルメニュー (Global Menu) を開き、 コントロールパネル → オブジェクト に移動します。

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

    最初のオブジェクト:

    分野価値
    ラベルできる
    複数形ラベルエイブルズ
    名前できる

    2番目の対象物:

    分野価値
    ラベルパン
    複数形ラベルパン屋
    名前パン

    第三の目的:

    分野価値
    ラベルチャーリー
    複数形ラベルチャーリーズ
    名前チャーリー
  3. 各オブジェクトのドラフトに、 名前 テキスト フィールドを追加します。

    ラベルフィールド名タイプ必須
    名前名前文章✔
  4. 以下の関係を定義してください。

    Ableの場合:

    ラベル関係名タイプ物体
    ベイカーになれるパン職人になれる一対多パン

    ベイカー氏へ:

    ラベル関係名タイプ物体
    ベイカーからチャーリーへパン屋からチャーリーへ一対多チャーリー

    チャーリーへ:

    ラベル関係名タイプ物体
    チャーリーからエイブルへチャーリーからエイブルへ多対多できる
  5. 各オブジェクトを公開します。

公開後は、ヘッドレスAPIを介して各オブジェクトにアクセスできます。

サンプルコードの準備

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

curl https://resources.learn.liferay.com/examples/liferay-w4s7.zip -O
unzip liferay-w4s7.zip

このZIPファイルには、REST APIを使用してオブジェクトエントリを作成、関連付け、およびクエリするためのcURLコマンドを実行するシェルスクリプトが含まれています。 これには、関連するエントリを照会するための2つのGETコマンドが含まれます。

ヒント

サイトおよび会社オブジェクト用に生成された API の完全なリストについては、 オブジェクト ヘッドレス フレームワーク統合 を参照してください。 Liferay API Explorer を介してカスタムオブジェクト API を表示およびテストできます。 [server]:[port]/o/api (例: localhost:8080/o/api)。 REST アプリケーション をクリックして、API を選択します。

  1. curl フォルダーの liferay-w4s7 に移動します。

    cd liferay-w4s7/curl
    
  2. Ableエントリを作成するには、 Ables_POST_ToCompany を実行します。

    ./Ables_POST_ToCompany.sh
    

    次のPOSTコマンドで使用するため、最初のエントリのIDをコピーしてください。

    {
    ...
      "externalReferenceCode" : "able-one"、
      "id" : 47512、
    ...
      "名前" : "エイブル 1"
    }
    
    {
    ...
      "externalReferenceCode" : "able-two"、
      "id" : 47514、
    ...
      "名前" : "エイブル 2"
    }
    
    {
    ...
      "externalReferenceCode" : "able-three"、
      "id" : 47516、
    ...
      "名前" : "エイブル 3"
    }
    
  3. Bakers_POST_ToCompany を、 able-one の ID をパラメータとして使用して実行します。

    ./Bakers_POST_ToCompany.sh [ableId]
    

    これにより、3 つの Baker エントリが作成され、 ableToBaker 関係を使用して、指定された Able エントリに関連付けられます。

    各 Baker エントリには、3 つの ableToBaker リレーションシップ フィールドがあります: ableToBakerERC、 r_ableToBaker_c_ableId、および r_ableToBaker_c_ableERC。

    {
    ...
      "externalReferenceCode" : "baker-one"、
      "id" : 47518、
    ...
      "名前" : "ベイカー 1"、
      "ableToBakerERC" : "able-one"、
      "r_ableToBaker_c_ableId" : 47512、
      "r_ableToBaker_c_ableERC" : "able-one"
    }
    
    {
    ...
      "externalReferenceCode" : "baker-two"、
      "id" : 47520、
    ...
      "名前" : "ベイカー 2"、
      "ableToBakerERC" : "able-one"、
      "r_ableToBaker_c_ableId" : 47512、
      "r_ableToBaker_c_ableERC" : "able-one"
    }
    
    {
    ...
      "externalReferenceCode" : "baker-three"、
      "id" : 47522、
    ...
      "名前" : "ベイカー 3"、
      "ableToBakerERC" : "able-one"、
      "r_ableToBaker_c_ableId" : 47512、
      "r_ableToBaker_c_ableERC" : "able-one"
    }
    

    次のPOSTコマンドで使用するために、最初のBakerエントリIDをコピーしてください。

  4. Charlies_POST_ToCompany を、 baker-one の ID を使用してパラメータとして実行します。

    ./Charlies_POST_ToCompany.sh [パン屋ID]
    

    これにより、3 つの Charlie エントリが作成され、 bakerToCharlie 関係を使用して、指定された Baker エントリに関連付けられます。

    {
    ...
      "externalReferenceCode" : "charlie-one"、
      "id" : 47524、
    ...
      "r_bakerToCharlie_c_bakerERC" : "baker-one",
      "bakerToCharlieERC" : "baker-one",
      "name" : "Charlie 1"、
      "r_bakerToCharlie_c_bakerId" : 47518
    }
    
    {
    ...
      "externalReferenceCode" : "charlie-two"、
      "id" : 47526、
    ...
      "r_bakerToCharlie_c_bakerERC" : "baker-one",
      "bakerToCharlieERC" : "baker-one",
      "name" : "Charlie 2"、
      "r_bakerToCharlie_c_bakerId" : 47518
    }
    
    {
    ...
      "externalReferenceCode" : "charlie-three"、
      "id" : 47528、
    ...
      "r_bakerToCharlie_c_bakerERC" : "baker-one",
      "bakerToCharlieERC" : "baker-one",
      "name" : "Charlie 3"、
      "r_bakerToCharlie_c_bakerId" : 47518
    }
    

    これで、ベーカーというエントリに関連付けられたチャーリーのエントリが3つあり、そのベーカーのエントリ自体はエイブルというエントリに関連付けられています。 ただし、基本的なGETリクエストを使用してCharlieのエントリを照会した場合、レスポンスにはCharlieのエントリの詳細のみが含まれます。 関連するBaker社またはAble社の項目に関する詳細は含まれていません。 これらのエントリの詳細を返すには、 nestedFields および nestedFieldsDepth パラメーターを使用する必要があります。

    最初のエントリのIDをコピーして、次のGETコマンドで使用してください。

  5. Charlie エントリ ID をパラメータとして使用して、 Charlies_GET_ById を実行します。

    ./Charlies_GET_ById.sh [charlieId]
    

    この GET リクエストは、 o/c/charlies エンドポイントを nestedFields および nestedFieldsDepth パラメータとともに呼び出します。

curl \
	"http://localhost:8080/o/c/charlies/${1}/?nestedFields=ableToBaker,bakerToCharlie&nestedFieldsDepth=2" \
	--user "test@liferay.com:learn"

nestedFields: クエリに含めるリレーションシップを決定します (ableToBaker,bakerToCharlie)。

nestedFieldsDepth: 含めるエントリの深さを決定します (2)。

このコマンドは、関連するオブジェクト(チャーリー、ベイカー、エイブル)の3つのレベルすべてを返します。

{
...
  "externalReferenceCode" : "charlie-one"、
  "id" : 47524、
...
  "r_bakerToCharlie_c_baker" : {
...
    "externalReferenceCode" : "baker-one"、
    "id" : 47518、
...
    "r_ableToBaker_c_able" : {
...
      "externalReferenceCode" : "able-one"、
      "id" : 47512、
...
      "名前" : "エイブル 1"
    },
    "bakerToCharlie" : [ {
...
      "externalReferenceCode" : "charlie-one"、
      "id" : 47524、
...
      "r_bakerToCharlie_c_bakerERC" : "baker-one",
      "bakerToCharlieERC" : "baker-one",
      "name" : "Charlie 1"、
      "r_bakerToCharlie_c_bakerId" : 47518
    }、 {
...
      "externalReferenceCode" : "charlie-two"、
      "id" : 47526、
...
      "r_bakerToCharlie_c_bakerERC" : "baker-one",
      "bakerToCharlieERC" : "baker-one",
      "name" : "Charlie 2"、
      "r_bakerToCharlie_c_bakerId" : 47518
    }、 {
...
      "externalReferenceCode" : "charlie-three"、
      "id" : 47528、
...
      "r_bakerToCharlie_c_bakerERC" : "baker-one",
      "bakerToCharlieERC" : "baker-one",
      "name" : "Charlie 3"、
      "r_bakerToCharlie_c_bakerId" : 47518
    } ]、
    "name" : "Baker 1"、
    "ableToBaker" : {
...
      "externalReferenceCode" : "able-one"、
      "id" : 47512、
...
      "名前" : "Able 1"
    },
    "r_ableToBaker_c_ableId" : 47512,
    "r_ableToBaker_c_ableERC" : "able-one"
  },
  "r_bakerToCharlie_c_bakerERC" : "baker-one",
  "bakerToCharlie" : {
...
    "externalReferenceCode" : "baker-one"、
    "id" : 47518、
...
    "r_ableToBaker_c_able" : {
...
      "externalReferenceCode" : "able-one"、
      "id" : 47512、
...
      "名前" : "エイブル 1"
    },
    "bakerToCharlie" : [ {
...
      "externalReferenceCode" : "charlie-one"、
      "id" : 47524、
...
      "r_bakerToCharlie_c_bakerERC" : "baker-one",
      "bakerToCharlieERC" : "baker-one",
      "name" : "Charlie 1"、
      "r_bakerToCharlie_c_bakerId" : 47518
    }、 {
...
      "externalReferenceCode" : "charlie-two"、
      "id" : 47526、
...
      "r_bakerToCharlie_c_bakerERC" : "baker-one",
      "bakerToCharlieERC" : "baker-one",
      "name" : "Charlie 2"、
      "r_bakerToCharlie_c_bakerId" : 47518
    }、 {
...
      "externalReferenceCode" : "charlie-three"、
      "id" : 47528、
...
      "r_bakerToCharlie_c_bakerERC" : "baker-one",
      "bakerToCharlieERC" : "baker-one",
      "name" : "Charlie 3"、
      "r_bakerToCharlie_c_bakerId" : 47518
    } ]、
    "name" : "Baker 1"、
    "ableToBaker" : {
...
      "externalReferenceCode" : "able-one"、
      "id" : 47512、
...
      "名前" : "Able 1"
    },
    "r_ableToBaker_c_ableId" : 47512,
    "r_ableToBaker_c_ableERC" : "able-one"
  },
  "name" : "Charlie 1",
  "r_bakerToCharlie_c_bakerId" : 47518
}
  1. これらの ERC を使用して Charlies_PUT_CharlieToAbles_ByExternalReferenceCode を実行します。

    ./Charlies_PUT_CharlieToAbles_ByExternalReferenceCode.sh charlie-one charlie-two charlie-three able-one
    

    これは、3 つの Charlie エントリすべてを、指定された able-one エントリに、 charlieToAble リレーションシップを使用して直接関連付けます。

  2. AbleエントリのERCを使用して、 Ables_GET_ByExternalReferenceCode を実行します。

    ./Ables_GET_ByExternalReferenceCode.sh able-one
    

    この GET リクエストは、 o/c/ables エンドポイントを nestedFields パラメータとともに呼び出します。

curl \
	"http://localhost:8080/o/c/ables/by-external-reference-code/${1}?nestedFields=charlieToAble" \
	--user "test@liferay.com:learn"

nestedFields: クエリに含めるリレーションシップを決定します (charlieToAble)。

このコマンドは、 able-one の詳細と、関連する 3 つの Charlie エントリのすべての詳細を返します。

{
...
  "externalReferenceCode" : "able-one"、
  "id" : 47512、
...
  "charlieToAble" : [ {
...
    "externalReferenceCode" : "charlie-one"、
    "id" : 47524、
...
    "r_bakerToCharlie_c_bakerERC" : "baker-one",
    "bakerToCharlieERC" : "baker-one",
    "name" : "Charlie 1"、
    "r_bakerToCharlie_c_bakerId" : 47518
  }、 {
...
    "externalReferenceCode" : "charlie-two"、
    "id" : 47526、
...
    "r_bakerToCharlie_c_bakerERC" : "baker-one",
    "bakerToCharlieERC" : "baker-one",
    "name" : "Charlie 2"、
    "r_bakerToCharlie_c_bakerId" : 47518
  }、 {
...
    "externalReferenceCode" : "charlie-three"、
    "id" : 47528、
...
    "r_bakerToCharlie_c_bakerERC" : "baker-one",
    "bakerToCharlieERC" : "baker-one",
    "name" : "Charlie 3"、
    "r_bakerToCharlie_c_bakerId" : 47518
  } ]、
  "name" : "Able 1"
}
curl \
	"http://localhost:8080/o/c/charlies/${1}/?nestedFields=ableToBaker,bakerToCharlie&nestedFieldsDepth=2" \
	--user "test@liferay.com:learn"
curl \
	"http://localhost:8080/o/c/ables/by-external-reference-code/${1}?nestedFields=charlieToAble" \
	--user "test@liferay.com:learn"