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

nestedFieldsを使用して関連エントリをクエリする

ライフレイ 7.4 U69+/GA69+

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

警告

検索 パラメータ を使用して、複数レベルの ネストされたフィールド を検索すると、パフォーマンスに影響し、深さのレベルが追加されるごとにパフォーマンスが低下します。 複数レベルの関連オブジェクトを検索するには、クエリごとに 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 つ 作成します。

    最初のオブジェクト:

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

    2番目のオブジェクト:

    項目
    ラベルBaker
    複数形のラベルBakers
    名前Baker

    3番目のオブジェクト:

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

    ラベル項目名種類必須
    Namenameテキストボックス
  4. 以下の関連を定義します。

    エイブルの場合:

    ラベルリレーション名種類オブジェクト
    Able to BakerableToBaker1 対多ベイカー

    ベイカーの場合:

    ラベルリレーション名種類オブジェクト
    Baker to CharliebakerToCharlie1 対多チャーリー

    チャーリーの場合:

    ラベルリレーション名種類オブジェクト
    Charlie to AblecharlieToAble多対多できる
  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 の [server]:[port]/o/api (例: localhost:8080/o/api)からカスタムオブジェクト API を表示およびテストできます。 REST アプリケーション をクリックし、API を選択します。

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

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

    ./Ables_POST_ToCompany.sh
    

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

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

    ./Bakers_POST_ToCompany.sh [ableId]
    

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

    各 Baker エントリには、3 つの ableToBaker 関係フィールド、 ableToBakerERCr_ableToBaker_c_ableId、および r_ableToBaker_c_ableERCがあります。

    {
      ...
      "externalReferenceCode" : "baker-one",
      "id" : 47518,
      ...
      "name" : "Baker 1",
      "ableToBakerERC" : "able-one",
      "r_ableToBaker_c_ableId" : 47512,
      "r_ableToBaker_c_ableERC" : "able-one"
    }
    
    {
      ...
      "externalReferenceCode" : "baker-two",
      "id" : 47520,
      ...
      "name" : "Baker 2",
      "ableToBakerERC" : "able-one",
      "r_ableToBaker_c_ableId" : 47512,
      "r_ableToBaker_c_ableERC" : "able-one"
    }
    
    {
      ...
      "externalReferenceCode" : "baker-three",
      "id" : 47522,
      ...
      "name" : "Baker 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 [bakerId]
    

    これにより、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
    }
    

    これで、Baker エントリに関連付けられた Charlie エントリが 3 つ作成され、Baker エントリ自体が Able エントリに関連付けられました。 ただし、基本的な GET リクエストを使用して Charlie エントリをクエリした場合、応答には Charlie エントリの詳細のみが含まれます。 関連する Baker または Able エントリの詳細は含まれません。 これらのエントリの詳細を返すには、 nestedFields および nestedFieldsDepth パラメータを使用する必要があります。

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

  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 つのレベルすべて (つまり、Charlie、Baker、Able) を返します。

{
  ...
  "externalReferenceCode" : "charlie-one",
  "id" : 47524,
  ...
  "r_bakerToCharlie_c_baker" : {
    ...
    "externalReferenceCode" : "baker-one",
    "id" : 47518,
    ...
    "r_ableToBaker_c_able" : {
      ...
      "externalReferenceCode" : "able-one",
      "id" : 47512,
      ...
      "name" : "Able 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,
      ...
      "name" : "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,
      ...
      "name" : "Able 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,
      ...
      "name" : "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
    

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

  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"
}

Charlies_GET_ById.sh

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

Ables_GET_ByExternalReferenceCode.sh

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