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つのオブジェクトドラフトを作成します。

    最初のオブジェクト:

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

    2番目の対象物:

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

    第三の目的:

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

    ラベル項目名種類必須
    Namenameテキストボックス
  4. 以下の関係をableオブジェクトに追加します。

    ラベルリレーション名種類オブジェクト
    Able to BakerableToBaker1 対多パン
    Able to CharlieableToCharlie1 対多チャーリー
  5. 各オブジェクトを公開します。

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

オブジェクトHTTPメソッドHTTPエンドポイントJavaメソッド
できるGET/{ableId}/ableToBakergetAbleAbleToBakerBakerPage
できるGET/{ableId}/ableToCharliegetAbleAbleToCharlieCharliePage
できるDELETE/{ableId}/ableToBaker/{bakerId}deleteAbleAbleToBakerBaker
できるPUT/{ableId}/ableToBaker/{bakerId}putAbleAbleToBakerBaker
できるDELETE/{ableId}/ableToCharlie/{charlieId}deleteAbleAbleToCharlieCharlie
できるPUT/{ableId}/ableToCharlie/{charlieId}putAbleAbleToCharlieCharlie
できるPUT/by-external-reference-code/{ableERC}/ableToBaker/{bakerERC}putAbleAbleToBakerBaker
できるPUT/by-external-reference-code/{ableERC}/ableToCharlie/{charlieERC}putAbleAbleToCharlieCharlie
チャーリーGET/{charlieId}/ableToCharliegetCharlieAbleToCharlieAblePage
チャーリーDELETE/{charlieId}/ableToCharlie/{ableId}deleteCharlieAbleToCharlieAble
チャーリーPUT/{charlieId}/ableToCharlie/{ableId}putCharlieAbleToCharlieAble
チャーリーPUT/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. liferay-f9m2プロジェクト内のcurlフォルダに移動します。

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

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

    ./Ables_PUT_AbleToBakers_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. 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,
      ...
      "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. Ables_PUT_AbleToCharlie_ByExternalReferenceCodeable-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,
      ...
      "name" : "Charlie 1"
    }
    {
      ...
      "externalReferenceCode" : "charlie-two",
      "id" : 42435,
      ...
      "name" : "Charlie 2"
    }
    {
      ...
      "externalReferenceCode" : "charlie-three",
      "id" : 42437,
      ...
      "name" : "Charlie 3"
    }
    
  7. Charlies_GET_AbleToCharlie_ByIdcharlie-one の ID で実行します。

    ./Charlies_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. Charlies_PUT_AbleToCharlie_ByExternalReferenceCodecharlie-one および able-two ERC と共に実行します。

    ./Charlies_PUT_AbleToCharlie_ByExternalReferenceCode.sh charlie-one able-two
    

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

    {
      ...
      "externalReferenceCode" : "able-two",
      "id" : 42423,
      ...
      "name" : "Able 2"
    }
    
  9. Charlies_GET_AbleToCharlie_ByIdcharlie-one の ID で実行し、関連する able エントリが 2 つあることを確認します。

    ./Charlies_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. Ables_GET_ByIdable-one の ID で実行します。

    ./Ables_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 を使用して関連エントリをクエリする を参照して、 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"