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

リレーションシップ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.132-ga132

http://localhost:8080 で Liferay にサインインしてください。 メールアドレス test@liferay.com とパスワード test を使用してください。 プロンプトが表示されたら、パスワードを learn に変更してください。

次に、関連する3つのカスタム・オブジェクトを作成する:

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

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

    最初のオブジェクト:

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

    2番目の対象物:

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

    第三の目的:

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

    ラベルフィールド名タイプ必須
    名前名前文章✔
  4. 以下の関係をableオブジェクトに追加します。

    ラベル関係名タイプ物体
    ベイカーになれるパン職人になれる一対多パン
    チャーリーにできるableToCharlie一対多チャーリー
  5. 各オブジェクトを公開します。

公開後は、以下の関係性APIを含むREST APIにアクセスできるようになります。

オブジェクトHTTPメソッドHTTPエンドポイントJavaメソッド
できる得る/{ableId}/ableToBakergetAbleAbleToBakerBakerPage
できる得る/{ableId}/ableToCharliegetAbleAbleToCharlieCharliePage
できる消去/{ableId}/ableToBaker/{bakerId}deleteAbleAbleToBakerBaker
できる置く/{ableId}/ableToBaker/{bakerId}putAbleAbleToBakerBaker
できる消去/{ableId}/ableToCharlie/{charlieId}deleteAbleAbleToCharlieCharlie
できる置く/{ableId}/ableToCharlie/{charlieId}putAbleAbleToCharlieCharlie
できる置く/by-external-reference-code/{ableERC}/ableToBaker/{bakerERC}putAbleAbleToBakerBaker
できる置く/by-external-reference-code/{ableERC}/ableToCharlie/{charlieERC}putAbleAbleToCharlieCharlie
チャーリー得る/{charlieId}/ableToCharliegetCharlieAbleToCharlieAblePage
チャーリー消去/{charlieId}/ableToCharlie/{ableId}deleteCharlieAbleToCharlieAble
チャーリー置く/{charlieId}/ableToCharlie/{ableId}putCharlieAbleToCharlieAble
チャーリー置く/by-external-reference-code/{ableERC}/ableToCharlie/{charlieERC}putCharlieAbleToCharlieAble
ヒント

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

サンプルコードの準備

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

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

サンプルコードには、各オブジェクトのエントリを作成するコマンドと、それらのリレーションシップAPIを使用するコマンドが含まれています。

サンプルコードの使用

REST APIを使用して、オブジェクトのエントリを追加し、それらの関係を管理します。

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

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

    ./Ables_POST_Batch.sh
    
    ./Bakers_POST_Batch.sh
    
    ./Charlies_POST_Batch.sh
    
  3. Ables_PUT_AbleToBakers_ByExternalReferenceCode を able-one ERC と 3 つの baker ERC すべてで実行します。

    ./Ables_PUT_AbleToBakers_ByExternalReferenceCode.sh able-one baker-one baker-two baker-three
    

    これは、該当するエントリをパン屋のエントリと関連付け、応答を出力します。

    {
    ...
      "externalReferenceCode" : "baker-one"、
      "id" : 42427、
    ...
      "名前" : "ベイカー 1"、
      "r_ableToBaker_c_ableId" : 42421、
      "r_ableToBaker_c_ableERC" : "able-one"
    }
    
    {
    ...
      "externalReferenceCode" : "baker-two"、
      "id" : 42429、
    ...
      "名前" : "ベイカー 2"、
      "r_ableToBaker_c_ableId" : 42421、
      "r_ableToBaker_c_ableERC" : "able-one"
    }
    
    {
    ...
      "externalReferenceCode" : "baker-three"、
      "id" : 42431、
    ...
      "名前" : "ベイカー 3"、
      "r_ableToBaker_c_ableId" : 42421、
      "r_ableToBaker_c_ableERC" : "able-one"
    }
    
  4. Ables_DELETE_AbleToBakers_ById を 2 つの ID で実行します。1 つは able-one の ID、もう 1 つは baker-three の ID です。

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

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

  5. 同じアブル ID を使用して Ables_GET_AbleToBaker_ById を実行して、それらがもはや関連付けられていないことを確認します。

    ./Ables_GET_AbleToBaker_ById.sh {able-entry-id}
    
    {
    ...
      "externalReferenceCode" : "baker-two"、
      "id" : 42429、
    ...
      "名前" : "ベイカー 2"、
      "r_ableToBaker_c_ableId" : 42421、
      "r_ableToBaker_c_ableERC" : "able-one"
    },
    {
    ...
      "externalReferenceCode" : "baker-one"、
      "id" : 42427、
    ...
      "名前" : "ベイカー 1"、
      "r_ableToBaker_c_ableId" : 42421、
      "r_ableToBaker_c_ableERC" : "able-one"
    }
    
  6. Ables_PUT_AbleToCharlie_ByExternalReferenceCode を able-one ERC と 3 つの charlie ERC すべてで実行します。

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

    これは、able エントリと charlie エントリを関連付け、応答を出力します。

    {
    ...
      "externalReferenceCode" : "charlie-one"、
      "id" : 42433、
    ...
      "名前" : "チャーリー 1"
    }
    {
    ...
      "externalReferenceCode" : "charlie-two"、
      "id" : 42435、
    ...
      "名前" : "チャーリー 2"
    }
    {
    ...
      "externalReferenceCode" : "charlie-three"、
      "id" : 42437、
    ...
      "名前" : "チャーリー 3"
    }
    
  7. Charlies_GET_AbleToCharlie_ById を charlie-one の ID で実行します。

    ./Charlies_GET_AbleToCharlie_ById.sh {charlie-entry-id}
    

    これは、指定されたチャーリーのエントリに関連するすべての有効なエントリのリストを返します。

    {
    ...
      "アイテム" : [ {
    ...
        "externalReferenceCode" : "able-one"、
        "id" : 42421、
    ...
        "名前" : "エイブル 1"
      } ],
      "最終ページ" : 1,
      "ページ" : 1,
      "ページサイズ" : 1、
      "合計数" : 1
    }
    
  8. Charlies_PUT_AbleToCharlie_ByExternalReferenceCode を charlie-one および able-two ERC と共に実行します。

    ./Charlies_PUT_AbleToCharlie_ByExternalReferenceCode.sh charlie-one able-two
    

    これは、チャーリーのエントリを別の有能なエントリに関連付けるものです。

    {
    ...
      "externalReferenceCode" : "able-two"、
      "id" : 42423、
    ...
      "名前" : "エイブル 2"
    }
    
  9. Charlies_GET_AbleToCharlie_ById を charlie-one の ID で実行し、関連する able エントリが 2 つあることを確認します。

    ./Charlies_GET_AbleToCharlie_ById.sh {charlie-entry-id}
    
    {
    ...
      "アイテム" : [ {
    ...
        "externalReferenceCode" : "able-two"、
        "id" : 42423、
    ...
        "名前" : "エイブル 2"
      }, {
    ...
        "externalReferenceCode" : "able-one"、
        "id" : 42421、
    ...
        "名前" : "エイブル 1"
      } ],
      "最終ページ" : 1,
      "ページ" : 1,
      "ページサイズ" : 2、
      "合計数" : 2
    }
    
  10. Ables_GET_ById を able-one の ID で実行します。

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

    このコマンドは、 nestedFields パラメーターを使用して、関連するすべての baker および charlie エントリを返します。

    {
      "externalReferenceCode" : "able-one",
      "id" : 42421,
    ...
      "ableToCharlie" : [ {
    ...
        "externalReferenceCode" : "charlie-one"、
        "id" : 42433、
    ...
        "名前" : "チャーリー 1"
      }, {
    ...
        "externalReferenceCode" : "charlie-two"、
        "id" : 42435、
    ...
        "名前" : "チャーリー 2"
      }, {
    ...
        "externalReferenceCode" : "charlie-three"、
        "id" : 42437、
    ...
        "名前" : "チャーリー 3"
      } ],
      "名前" : "エイブル 1",
      "ableToBaker" : [ {
    ...
        "externalReferenceCode" : "baker-one"、
        "id" : 42427、
    ...
        "名前" : "ベイカー 1"、
        "r_ableToBaker_c_ableId" : 42421、
        "r_ableToBaker_c_ableERC" : "able-one"
      }, {
    ...
        "externalReferenceCode" : "baker-two"、
        "id" : 42429、
    ...
        "名前" : "ベイカー 2"、
        "r_ableToBaker_c_ableId" : 42421、
        "r_ableToBaker_c_ableERC" : "able-one"
      } ]
    }
    

    nestedFields を使用して関連エントリをクエリする を参照して、 nestedFields パラメーターの詳細を確認してください。

法典の検証

外部参照コードを使用してAbleをCharlieに渡す

curl \
	"http://localhost:8080/o/c/charlies/by-external-reference-code/${1}/ableToCharlie/${2}" \
	--header "Content-Type: application/json" \
	--request "PUT" \
	--user "test@liferay.com:learn"

IDでチャーリーのためにAbleを手に入れよう

curl \
	"http://localhost:8080/o/c/charlies/${1}/ableToCharlie" \
	--header "Content-Type: application/json" \
	--user "test@liferay.com:learn"

IDでベイカーに削除可能

curl \
	"http://localhost:8080/o/c/ables/${1}/ableToBaker/${2}" \
	--header "Content-Type: application/json" \
	--request "DELETE" \
	--user "test@liferay.com:learn"
curl \
	"http://localhost:8080/o/c/ables/${1}/?nestedFields=ableToBaker,ableToCharlie" \
	--user "test@liferay.com:learn"