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

ヘッドレス API によるオブジェクトの管理

Liferay DXP 7.4+

アプリケーション メニューから オブジェクトを作成および管理 できますが、Liferay の REST API を使用することもできます。 オブジェクトを作成および管理するには、これらのサービスを呼び出します。 Liferay のコードベースでは、オブジェクトは オブジェクト定義と呼ばれることに注意してください。 各オブジェクト定義は、さまざまなオブジェクト フィールドで構成されます。

オブジェクト定義とオブジェクトフィールドの追加

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

docker run -it -m 8g -p 8080:8080 liferay/dxp:2025.q1.6-lts

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

次に、以下の手順に従います。

  1. 提供されているサンプル コードをダウンロードして解凍します。

    curl https://resources.learn.liferay.com/examples/liferay-r4g6.zip -O
    
    unzip liferay-r4g6.zip
    
  2. cURL スクリプトを使用して、インスタンスに新しいオブジェクト定義を追加します。 コマンドラインで、curlフォルダに移動します。 ObjectDefinitions_POST_ToInstance.sh スクリプトを実行します。

    ./ObjectDefinitions_POST_ToInstance.sh
    

    JSON 応答には、新しいオブジェクト定義が追加されたことが示されています。

    "active" : false,
    "dateCreated" : "2023-05-31T16:51:18Z",
    "dateModified" : "2023-05-31T16:51:18Z",
    "defaultLanguageId" : "en_US",
    "enableCategorization" : true,
    "enableComments" : false,
    "enableObjectEntryHistory" : false,
    "externalReferenceCode" : "4574eea8-03e9-d4c6-b9f9-23368b94350c",
    "id" : 44525,
    "label" : {
      "en_US" : "Foo"
    },
    "name" : "Foo",
    "objectActions" : [ ],
    ...
    "pluralLabel" : {
      "en_US" : "Foos"
    },
    "portlet" : false,
    "restContextPath" : "/o/c/foos",
    "scope" : "company",
    "status" : {
       "code" : 2,
       "label" : "draft",
       "label_i18n" : "Draft"
    },
    "system" : false,
    "titleObjectFieldName" : "id"
    
  3. グローバル メニューアプリケーションオブジェクトに移動します。 新しいオブジェクトが追加されたことを確認します。

    新しいオブジェクト定義が追加されたことを確認します。

    Foo オブジェクトをクリックします。 オブジェクトの ID 番号をメモします。

  4. cURL スクリプトを使用して、オブジェクト定義に新しいオブジェクト フィールドを追加します。 コマンドラインで、 ObjectFields_POST_ToObjectDefinition.sh スクリプトを実行します。 1234 をオブジェクトの ID に置き換えます。

    ./ObjectFields_POST_ToObjectDefinition.sh 1234
    
  5. Liferay で、 Foo オブジェクトをもう一度クリックします。 フィールド タブをクリックします。 新しい Able フィールドが追加されたことに注意してください。

    新しいオブジェクト フィールドが追加されたことを確認します。

  6. REST サービスは、Java クライアントを使用して呼び出すこともできます。 curl フォルダから、 java フォルダに移動します。 ソースファイルをコンパイルします。

    javac -classpath .:* *.java
    
  7. ObjectDefinitions_POST_ToInstance.java クラスを実行します。

    java -classpath .:* ObjectDefinitions_POST_ToInstance
    
  8. Foo オブジェクトの ID 番号に注意してください。 次に、 ObjectFields_POST_ToObjectDefinition.java クラスを実行します。 1234 をオブジェクトの ID に置き換えます。

    java -classpath .:* -DobjectDefinitionId=1234 ObjectFields_POST_ToObjectDefinition
    

新しく作成されたオブジェクトはまだドラフト状態です。 公開する前に必要な変更や修正を行ってください。 オブジェクトが公開されると、編集は無効になります。 詳細については、 オブジェクトの下書きの公開 を参照してください。

cURLコマンドを調べる

ObjectDefinitions_POST_ToInstance.sh スクリプトは、cURL コマンドを使用して REST サービスを呼び出します。

curl \
	"http://localhost:8080/o/object-admin/v1.0/object-definitions" \
	--data-raw '
		{
			"label": {
				"en_US": "Foo"
			},
			"name": "Foo",
			"pluralLabel": {
				"en_US": "Foos"
			},
			"scope": "company"
		}' \
	--header "Content-Type: application/json" \
	--request "POST" \
	--user "test@liferay.com:learn"

ここでは、コマンドの引数を紹介します。

引数説明
-H "Content-Type: application/json"JSON のリクエスト ボディ形式を定義します。
-X POST指定されたエンドポイントで起動するHTTPメソッド
"http://localhost:8080/o/object-admin/v1.0/object-definitions"RESTサービスのエンドポイント
-d "{\"label\": {\"en_US\": \"Foo\"}, \"name\": \"Foo\", \"pluralLabel\": {\"en_US\": \"Foos\"}, \"scope\": \"company\"}"お客様が掲載を希望するデータ
-u "test@liferay.com:learn"基本的な認証情報

ここでは、デモのために基本的な認証を使用しています。 本番環境では、 OAuth2経由でユーザーを認証する必要があります。 OAuth2 を使用するサンプル React アプリケーションについては、 OAuth2 を使用してユーザーを承認する を参照してください。

他のcURLコマンドも同様のJSON引数を使用しています。

Javaクラスを調べる

ObjectDefinitions_POST_ToInstance.java クラスは、関連するサービスを呼び出してオブジェクト定義を追加します。

public static void main(String[] args) throws Exception {
	ObjectDefinitionResource.Builder builder =
		ObjectDefinitionResource.builder();

	ObjectDefinitionResource objectDefinitionResource =
		builder.authentication(
			"test@liferay.com", "learn"
		).build();

	ObjectDefinition objectDefinition =
		objectDefinitionResource.postObjectDefinition(
			new ObjectDefinition() {
				{
					label = Collections.singletonMap("en_US", "Foo");
					name = "Foo";
					pluralLabel = Collections.singletonMap("en_US", "Foos");
					scope = "company";
				}
			});

	System.out.println(objectDefinition);
}

このクラスは、わずか3行のコードでRESTサービスを呼び出します。

行(省略形)説明
ObjectDefinitionResource.Builder builder = ...Builder を取得して、 ObjectDefinitionResource サービス インスタンスを生成します。
ObjectDefinitionResource objectDefinitionResource = builder.authentication(...).build();基本認証を指定し、 ObjectDefinitionResource サービス インスタンスを生成します。
ObjectDefinition objectDefinition = objectDefinitionResource.postObjectDefinition(...);objectDefinitionResource.postObjectDefinition メソッドを呼び出し、データを post に渡します。

プロジェクトには、依存関係としてcom.liferay.object.admin.rest.client.jarファイルが含まれていることに注意してください。 すべてのRESTアプリケーションのクライアントJAR依存関係情報は、/o/apiでインストール先のAPIエクスプローラーで確認できます。

メイン メソッドのコメントは、クラスの実行を示しています。

他のJavaクラスの例は、このクラスと似ていますが、異なるメソッドを呼び出しています。

重要

サービスの詳細については、 ObjectDefinitionResource を参照してください。

以下は、cURLとJavaを使って、関連する他のRESTサービスを呼び出す例です。

インスタンスからオブジェクトを取得する

次の cURL または Java コマンドを実行すると、オブジェクト定義を一覧表示できます。

オブジェクト定義_GET_FromInstance.sh

コマンド:

./ObjectDefinitions_GET_FromInstance.sh

コード:

curl \
	"http://localhost:8080/o/object-admin/v1.0/object-definitions" \
	--user "test@liferay.com:learn"

オブジェクト定義_GET_FromInstance.java

コマンド:

java -classpath .:* ObjectDefinitions_GET_FromInstance

コード:

public static void main(String[] args) throws Exception {
	ObjectDefinitionResource.Builder builder =
		ObjectDefinitionResource.builder();

	ObjectDefinitionResource objectDefinitionResource =
		builder.authentication(
			"test@liferay.com", "learn"
		).build();

	Page<ObjectDefinition> page =
		objectDefinitionResource.getObjectDefinitionsPage(
			null, null, null, Pagination.of(1, 2), null);

	System.out.println(page);
}

インスタンスのオブジェクト定義は JSON 形式で表示されます。

オブジェクト定義を取得する

次の cURL または Java コマンドを使用して、特定のオブジェクト定義を取得します。

ヒント

インスタンス ObjectDefinition ID を取得するには、 ObjectDefinitions_GET_FromInstance.[java|sh] を使用します。

オブジェクト定義_GET_ById.sh

コマンド:

./ObjectDefinitions_GET_ById.sh 1234

コード:

curl \
	"http://localhost:8080/o/object-admin/v1.0/object-definitions/${1}" \
	--user "test@liferay.com:learn"

オブジェクト定義_GET_ById.java

コマンド:

java -classpath .:* -DobjectDefinitionId=1234 ObjectDefinitions_GET_ById

コード:

public static void main(String[] args) throws Exception {
	ObjectDefinitionResource.Builder builder =
		ObjectDefinitionResource.builder();

	ObjectDefinitionResource objectDefinitionResource =
		builder.authentication(
			"test@liferay.com", "learn"
		).build();

	System.out.println(
		objectDefinitionResource.getObjectDefinition(
			Long.valueOf(System.getProperty("objectDefinitionId"))));
}

オブジェクト定義のフィールドは JSON 形式で表示されます。

オブジェクト定義のパッチ

次の cURL および Java コマンドを使用して、既存のオブジェクト定義を部分的に編集します。 1234 をオブジェクト定義の ID に置き換えます。

オブジェクト定義_PATCH_ById.sh

コマンド:

./ObjectDefinitions_PATCH_ById.sh 1234

コード:

curl \
	"http://localhost:8080/o/object-admin/v1.0/object-definitions/${1}" \
	--data-raw '
		{
			"label": {
				"en_US": "Bar"
			},
			"name": "Bar",
			"pluralLabel": {
				"en_US": "Bars"
			}
		}' \
	--header "Content-Type: application/json" \
	--request "PATCH" \
	--user "test@liferay.com:learn"

オブジェクト定義_PATCH_ById.java

コマンド:

java -classpath .:* -DobjectDefinitionId=1234 ObjectDefinitions_PATCH_ById

コード:

public static void main(String[] args) throws Exception {
	ObjectDefinitionResource.Builder builder =
		ObjectDefinitionResource.builder();

	ObjectDefinitionResource objectDefinitionResource =
		builder.authentication(
			"test@liferay.com", "learn"
		).build();

	ObjectDefinition objectDefinition =
		objectDefinitionResource.patchObjectDefinition(
			Long.valueOf(System.getProperty("objectDefinitionId")),
			new ObjectDefinition() {
				{
					label = Collections.singletonMap("en_US", "Bar");
					name = "Bar";
					pluralLabel = Collections.singletonMap("en_US", "Bars");
				}
			});

	System.out.println(objectDefinition);
}

オブジェクト定義を配置する

次の cURL および Java コマンドを使用して、既存のオブジェクト定義を完全に上書きします。 1234 をオブジェクト定義の ID に置き換えます。

オブジェクト定義_PUT_ById.sh

コマンド:

./ObjectDefinitions_PUT_ById.sh 1234

コード:

curl \
	"http://localhost:8080/o/object-admin/v1.0/object-definitions/${1}" \
	--data-raw '
		{
			"label": {
				"en_US": "Goo"
			},
			"name": "Goo",
			"pluralLabel": {
				"en_US": "Goos"
			},
			"scope": "company"
		}' \
	--header "Content-Type: application/json" \
	--request "PUT" \
	--user "test@liferay.com:learn"

オブジェクト定義_PUT_ById.java

コマンド:

java -classpath .:* -DobjectDefinitionId=1234 ObjectDefinitions_PUT_ById

コード:

public static void main(String[] args) throws Exception {
	ObjectDefinitionResource.Builder builder =
		ObjectDefinitionResource.builder();

	ObjectDefinitionResource objectDefinitionResource =
		builder.authentication(
			"test@liferay.com", "learn"
		).build();

	ObjectDefinition objectDefinition =
		objectDefinitionResource.putObjectDefinition(
			Long.valueOf(System.getProperty("objectDefinitionId")),
			new ObjectDefinition() {
				{
					label = Collections.singletonMap("en_US", "Goo");
					name = "Goo";
					pluralLabel = Collections.singletonMap("en_US", "Goos");
					scope = "company";
				}
			});

	System.out.println(objectDefinition);
}

オブジェクト定義を削除する

次の cURL および Java コマンドを使用して、既存のオブジェクト定義を削除します。 1234 をオブジェクト定義の ID に置き換えます。

オブジェクト定義_DELETE_ById.sh

コマンド:

./ObjectDefinitions_DELETE_ById.sh 1234

コード:

curl \
	"http://localhost:8080/o/object-admin/v1.0/object-definitions/${1}" \
	--request "DELETE" \
	--user "test@liferay.com:learn"

オブジェクト定義_DELETE_ById.java

コマンド

java -classpath .:* -DobjectDefinitionId=1234 ObjectDefinitions_DELETE_ById

コード:

public static void main(String[] args) throws Exception {
	ObjectDefinitionResource.Builder builder =
		ObjectDefinitionResource.builder();

	ObjectDefinitionResource objectDefinitionResource =
		builder.authentication(
			"test@liferay.com", "learn"
		).build();

	objectDefinitionResource.deleteObjectDefinition(
		Long.valueOf(System.getProperty("objectDefinitionId")));
}

オブジェクトフィールドのサービス

オブジェクト フィールドの cURL コマンドと Java クラスは、オブジェクト定義と同じように動作します。

ファイル説明
ObjectFields_DELETE_ById.[java\|sh]ID によってオブジェクト フィールドを削除します。
ObjectFields_GET_ById.[java\|sh]ID によって特定のオブジェクト フィールドを取得します。
ObjectFields_PATCH_ById.[java\|sh]特定のオブジェクト フィールドを ID でパッチします。
ObjectFields_POST_ToObjectDefinition.[java\|sh]オブジェクト フィールドをオブジェクト定義に投稿します。
ObjectFields_PUT_ById.[java\|sh]特定のオブジェクト フィールドを ID で置き換えます。
ObjectFields_GET_FromObjectDefinition.[java\|sh]オブジェクト定義からオブジェクト フィールドのリストを取得します。

API エクスプローラー には、オブジェクトのすべてのサービスとスキーマが表示され、各サービスを試すためのインターフェースがあります。