カテゴリーとボキャブラリAPIの基本
LiferayのREST APIは、Liferayのカテゴリーとボキャブラリ機能のためのサービスを提供します。 APIを使用してボキャブラリを作成および編集できます。 カテゴリーをAPIに関連付けて編集することもできます。 まずは、新しいボキャブラリを追加する例を見てみましょう。
Liferay DXP 2025.Q1+/Portal GA132+ カテゴリと語彙APIは、これらの要素を参照するために外部参照コード(ERC)を使用するようになりました。これにより、インスタンス間で一貫した識別が可能になり、バッチエクスポート/インポートがサポートされて、コンテンツ管理と移植性が向上します。
語彙を追加する
新しい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に変更します。
次に、以下の手順に従います。
-
カテゴリと語彙 API の基礎をダウンロードして解凍します。
curl https://resources.learn.liferay.com/examples/liferay-f5w3.zip -Ounzip liferay-f5w3.zip -
サイトのIDを見つけます。 以下のさまざまなサービス呼び出しで ID を使用します。
-
cURL スクリプトを使用して、サイトに新しい語彙を追加します。 コマンドラインで、
curlフォルダに移動します。 サイト ID をパラメータとしてTaxonomyVocabularies_POST_ToSites.shスクリプトを実行します。./TaxonomyVocabularies_POST_ToSites.sh 1234JSON応答では、新しいボキャブラリが追加されたことを示しています。
{ "availableLanguages" : [ "en-US" ], "creator" : { "additionalName" : "", "contentType" : "UserAccount", "familyName" : "Test", "givenName" : "Test", "id" : 20129, "name" : "Test Test", "profileURL" : "/web/test" }, "dateCreated" : "2021-09-09T21:03:15Z", "dateModified" : "2021-09-09T21:03:15Z", "description" : "Foo", "id" : 40126, "name" : "Able", "numberOfTaxonomyCategories" : 0, "siteId" : 20125 } -
管理メニュー → 分類 → カテゴリに移動して、カテゴリ アプリケーションに移動します。 新しいボキャブラリが追加されたことを確認してください。

-
RESTサービスは、Javaクライアントを使って呼び出すこともできます。
curlフォルダから、javaフォルダに移動します。 以下のコマンドでソースファイルをコンパイルします。javac -classpath .:* *.java -
次のコマンドで
TaxonomyVocabularies_POST_ToSitesクラスを実行します。siteId値をサイトのIDに置き換えます。java -classpath .:* -DsiteId=1234 TaxonomyVocabularies_POST_ToSites
cURLコマンドの検証
TaxonomyVocabularies_POST_ToSites.sh スクリプトは、cURL コマンドを使用して REST サービスを呼び出します。
curl \
"http://localhost:8080/o/headless-admin-taxonomy/v1.0/sites/${1}/taxonomy-vocabularies" \
--data-raw '
{
"description": "Foo",
"name": "Able"
}' \
--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/headless-admin-taxonomy/v1.0/sites/${1}/taxonomy-vocabularies" | RESTサービスのエンドポイント |
-d "{\"description\": \"Foo\", \"name\": \"Able\"}" | お客様が掲載を希望するデータ |
-u "test@liferay.com:learn" | 基本的な認証情報 |
ここでは、デモのために基本的な認証を使用しています。 本番環境では、 OAuth2経由でユーザーを認証する必要があります。 OAuth2 を使用するサンプル React アプリケーションについては、 OAuth2 を使用してユーザーを承認する を参照してください。
他のcURLコマンドも同様のJSON引数を使用しています。
Javaクラスを調べる
TaxonomyVocabularies_POST_ToSites.java クラスは、語彙関連のサービスを呼び出して語彙を追加します。
public static void main(String[] args) throws Exception {
TaxonomyVocabularyResource.Builder builder =
TaxonomyVocabularyResource.builder();
TaxonomyVocabularyResource taxonomyVocabularyResource =
builder.authentication(
"test@liferay.com", "learn"
).build();
TaxonomyVocabulary taxonomyVocabulary =
taxonomyVocabularyResource.postSiteTaxonomyVocabulary(
Long.valueOf(System.getProperty("siteId")),
new TaxonomyVocabulary() {
{
description = "Foo";
name = "Baker";
}
});
System.out.println(taxonomyVocabulary);
}
このクラスは、わずか3行のコードでRESTサービスを呼び出します。
| 行(省略形) | 説明 |
|---|---|
TaxonomyVocabularyResource.Builder builder = ... | Builderを取得し、TaxonomyVocabularyResourceサービスインスタンスを生成します。 |
TaxonomyVocabularyResource taxonomyVocabularyResource = builder.authentication(...).build(); | 基本認証を指定し、TaxonomyVocabularyResourceサービスインスタンスを生成します。 |
TaxonomyVocabulary taxonomyVocabulary = taxonomyVocabularyResource.postSiteTaxonomyVocabulary(...); | postSiteTaxonomyVocabularyメソッドを呼び出し、投稿するデータを渡します。 |
プロジェクトには、依存関係としてcom.liferay.headless.admin.taxonomy.client.jarファイルが含まれていることに注意してください。 すべてのRESTアプリケーションのクライアントJAR依存関係情報は、/o/apiでインストール先のAPIエクスプローラーで確認できます。
メイン メソッドのコメントは、クラスの実行を示しています。
他の例のJavaクラスはこれと類似していますが、異なるTaxonomyVocabularyResourceメソッドを呼び出します。
サービスの詳細については、 TaxonomyVocabularyResource を参照してください。
以下は、cURLとJavaを使って、他のTaxonomyVocabulary RESTサービスを呼び出す例です。
サイトからボキャブラリを取得する
次の cURL または Java コマンドを実行すると、サイトの語彙を一覧表示できます。 上記のように、1234をサイトのIDに置き換えてください。
タクソノミーボキャブラリー_GET_FromSites.sh
コマンド:
./TaxonomyVocabularies_GET_FromSites.sh 1234
コード:
curl \
"http://localhost:8080/o/headless-admin-taxonomy/v1.0/sites/${1}/taxonomy-vocabularies" \
--user "test@liferay.com:learn"
タクソノミーボキャブラリー_GET_FromSites.java
コマンド:
java -classpath .:* -DsiteId=1234 TaxonomyVocabularies_GET_FromSites
コード:
public static void main(String[] args) throws Exception {
TaxonomyVocabularyResource.Builder builder =
TaxonomyVocabularyResource.builder();
TaxonomyVocabularyResource taxonomyVocabularyResource =
builder.authentication(
"test@liferay.com", "learn"
).build();
Page<TaxonomyVocabulary> page =
taxonomyVocabularyResource.getSiteTaxonomyVocabulariesPage(
Long.valueOf(System.getProperty("siteId")), null, null, null,
Pagination.of(1, 2), null);
System.out.println(page.getItems());
}
サイトの TaxonomyVocabulary オブジェクトは JSON 形式で表示されます。
ボキャブラリの取得
次のcURLまたはJavaコマンドを使用して、特定のボキャブラリを取得します。 1234をボキャブラリのIDに置き換えてください。
TaxonomyVocabularies_GET_FromSites.[java|sh] を使用して Vocabulary ID を取得します。
タクソノミーボキャブラリー_GET_ById.sh
コマンド:
./TaxonomyVocabularies_GET_ById.sh 1234
コード:
curl \
"http://localhost:8080/o/headless-admin-taxonomy/v1.0/taxonomy-vocabularies/${1}" \
--user "test@liferay.com:learn"
タクソノミーボキャブラリー_GET_ById.java
コマンド:
java -classpath .:* -DtaxonomyVocabularyId=1234 TaxonomyVocabularies_GET_ById
コード:
public static void main(String[] args) throws Exception {
TaxonomyVocabularyResource.Builder builder =
TaxonomyVocabularyResource.builder();
TaxonomyVocabularyResource taxonomyVocabularyResource =
builder.authentication(
"test@liferay.com", "learn"
).build();
System.out.println(
taxonomyVocabularyResource.getTaxonomyVocabulary(
Long.valueOf(System.getProperty("taxonomyVocabularyId"))));
}
TaxonomyVocabulary フィールドは JSON に表示されます。
ボキャブラリにパッチを適用する
次のcURLおよびJavaコマンドを使用して、既存のボキャブラリを部分的に編集します。 注: 1234をボキャブラリのIDに置き換えてください。
タクソノミーボキャブラリー_PATCH_ById.sh
コマンド:
./TaxonomyVocabularies_PATCH_ById.sh 1234
コード:
curl \
"http://localhost:8080/o/headless-admin-taxonomy/v1.0/taxonomy-vocabularies/${1}" \
--data-raw '
{
"description": "Bar",
"name": "Able"
}' \
--header "Content-Type: application/json" \
--request "PATCH" \
--user "test@liferay.com:learn"
タクソノミーボキャブラリ_PATCH_ById.java
コマンド:
java -classpath .:* -DtaxonomyVocabularyId=1234 TaxonomyVocabularies_PATCH_ById
コード:
public static void main(String[] args) throws Exception {
TaxonomyVocabularyResource.Builder builder =
TaxonomyVocabularyResource.builder();
TaxonomyVocabularyResource taxonomyVocabularyResource =
builder.authentication(
"test@liferay.com", "learn"
).build();
TaxonomyVocabulary taxonomyVocabulary =
taxonomyVocabularyResource.patchTaxonomyVocabulary(
Long.valueOf(System.getProperty("taxonomyVocabularyId")),
new TaxonomyVocabulary() {
{
description = "Bar";
name = "Baker";
}
});
System.out.println(taxonomyVocabulary);
}
この例では、説明がFooからBarに変更されています。
ボキャブラリの配置
次のcURLおよびJavaコマンドを使用して、既存のボキャブラリを上書きします。 注: 1234をボキャブラリのIDに置き換えてください。
タクソノミーボキャブラリ_PUT_ById.sh
コマンド:
./TaxonomyVocabularies_PUT_ById.sh 1234
コード:
curl \
"http://localhost:8080/o/headless-admin-taxonomy/v1.0/taxonomy-vocabularies/${1}" \
--data-raw '
{
"description": "Goo",
"name": "Able"
}' \
--header "Content-Type: application/json" \
--request "PUT" \
--user "test@liferay.com:learn"
タクソノミーボキャブラリ_PUT_ById.java
コマンド:
java -classpath .:* -DtaxonomyVocabularyId=1234 TaxonomyVocabularies_PUT_ById
コード:
public static void main(String[] args) throws Exception {
TaxonomyVocabularyResource.Builder builder =
TaxonomyVocabularyResource.builder();
TaxonomyVocabularyResource taxonomyVocabularyResource =
builder.authentication(
"test@liferay.com", "learn"
).build();
TaxonomyVocabulary taxonomyVocabulary =
taxonomyVocabularyResource.putTaxonomyVocabulary(
Long.valueOf(System.getProperty("taxonomyVocabularyId")),
new TaxonomyVocabulary() {
{
description = "Goo";
name = "Baker";
}
});
System.out.println(taxonomyVocabulary);
}
ボキャブラリの削除
次のcURLおよびJavaコマンドを使用して、既存のボキャブラリを削除します。 注: 1234をボキャブラリのIDに置き換えてください。
タクソノミー語彙_DELETE_ById.sh
コマンド:
./TaxonomyVocabularies_DELETE_ById.sh 1234
コード:
curl \
"http://localhost:8080/o/headless-admin-taxonomy/v1.0/taxonomy-vocabularies/${1}" \
--request "DELETE" \
--user "test@liferay.com:learn"
タクソノミーボキャブラリ_DELETE_ById.java
コマンド
java -classpath .:* -DtaxonomyVocabularyId=1234 TaxonomyVocabularies_DELETE_ById
コード:
public static void main(String[] args) throws Exception {
TaxonomyVocabularyResource.Builder builder =
TaxonomyVocabularyResource.builder();
TaxonomyVocabularyResource taxonomyVocabularyResource =
builder.authentication(
"test@liferay.com", "learn"
).build();
taxonomyVocabularyResource.deleteTaxonomyVocabulary(
Long.valueOf(System.getProperty("taxonomyVocabularyId")));
}
タクソノミーカテゴリーサービス
タクソノミーカテゴリーのcURLコマンドとJavaクラスは、タクソノミーボキャブラリと同様に機能します。 一部のサービスではタクソノミーのボキャブラリIDが必要であることに注意してください。
| ファイル | 説明 |
|---|---|
TaxonomyCategories_GET_FromTaxonomyVocabularies.[java\|sh] | ボキャブラリからカテゴリーの一覧を取得します。 |
TaxonomyCategories_DELETE_ById.[java\|sh] | カテゴリーを削除します。 |
TaxonomyCategories_GET_ById[java\|sh] | IDで特定のカテゴリーを取得します。 |
TaxonomyCategories_PATCH_ById.[java\|sh] | カテゴリーにパッチを適用します。 |
TaxonomyCategories_POST_ToTaxonomyVocabularies.[java\|sh] | カテゴリーをボキャブラリに投稿します。 |
TaxonomyCategories_PUT_ById.[java\|sh] | カテゴリーを配置します。 |
API エクスプローラー には、すべての TaxonomyVocabulary および TaxonomyCategory サービスとスキーマが一覧表示され、各サービスを試すためのインターフェースがあります。
バッチエンジンによる語彙管理の改善
Liferay DXP 2025年第2四半期以降
カテゴリと語彙 API は、Liferay インスタンス間でカテゴリと語彙を移行するためのバッチエクスポートとインポートをサポートしています。 このプロセスには、関連する 権限のエクスポートとインポート、作成日や変更日、名前、その他の属性に基づいたユーザーの フィルター の処理、およびインポート中の 作成者データの維持 が含まれます。
バッチ エンジンの使用の詳細については、「バッチ エンジン API を使用したデータの エクスポート および インポート 」を参照してください。
語彙の権限
これらの API エンドポイントを使用して語彙の権限を管理します。 次の例では、 ${1} をサイト ID に置き換えます。
-
権限付き語彙の作成:
ボキャブラリのエンドポイントに
POSTリクエストを送信して、作成中にボキャブラリにカスタム権限を割り当てます。 指定されたロールはシステムにすでに存在している必要があります。 ロールが存在しない場合は、API は 404 エラーを返します。例:
curl \ "http://localhost:8080/o/headless-admin-taxonomy/v1.0/sites/${1}/taxonomy-vocabularies" \ --data-raw ' { "description": "Foo", "name": "Able", "permissions": [ { "roleName": "Role1", "actionIds": ["VIEW", "UPDATE"] }, { "roleName": "Role2", "actionIds": ["VIEW"] } ] }' \ --header "Content-Type: application/json" \ --request "POST" \ --user "test@liferay.com:learn"権限配列は、語彙のロールおよびそれに関連付けられた権限を指定します。 権限が定義されていない場合は、ロールに割り当てられたデフォルトの権限で語彙が作成されます。 -
語彙権限を取得:
デフォルトでは、語彙の権限は応答に含まれません。 これらを取得するには、クエリに
nestedFields=permissionsを追加します。例:
curl \ "http://localhost:8080/o/headless-admin-taxonomy/v1.0/sites/${1}/taxonomy-vocabularies?nestedFields=permissions" \ --user "test@liferay.com:learn" -
パッチ語彙権限:
作成時に権限を割り当てる方法と同様に、
PATCHリクエストを使用して既存のボキャブラリの権限を更新できます。例:
curl \ "http://localhost:8080/o/headless-admin-taxonomy/v1.0/taxonomy-vocabularies/${1}" \ --data-raw ' { "description": "Bar", "name": "Able", "permissions": [ { "roleName": "Role1", "actionIds": ["VIEW", "UPDATE", "DELETE"] }, { "roleName": "Role2", "actionIds": ["VIEW", "PERMISSIONS"] } ] }' \ --header "Content-Type: application/json" \ --request "PATCH" \ --user "test@liferay.com:learn"
データをフィルタリング
クエリ パラメータを使用してエクスポートされたデータを調整します。
curl \
"http://localhost:8080/o/headless-batch-engine/v1.0/export-task/com.liferay.headless.admin.taxonomy.client.dto.v1_0.TaxonomyVocabulary/JSON?taskItemDelegateName=Tech&filter=name%20eq%20%27Tech%27" \
--header "Content-Type: application/json" \
--request "POST" \
--user "test@liferay.com:learn"
この例では、クエリ パラメータは次のようになります。
-
バッチ エンジン API を使用してエクスポート タスクを開始するには、
http://localhost:8080/o/headless-batch-engine/v1.0/export-task/を使用します。 -
com.liferay.headless.admin.taxonomy.client.dto.v1_0.TaxonomyVocabulary/JSONは、エクスポートするデータのタイプを指定します(この場合は、JSON形式のTaxonomy Vocabularyデータ)。TaxonomyVocabularyは、語彙を表す役割を担う API のクラスを指します。 -
taskItemDelegateName=Techはエクスポートする語彙を指定します。 この例では、値Techは、 Techという名前の語彙に対応します。 この値を、エクスポートする語彙の名前に置き換えます。 -
filter=name%20eq%20%27Tech%27はエクスポートによって返されるデータを絞り込みます。 フィルター クエリ パラメータはここで URL エンコードされます (name%20eq%20%27Tech%27)。 フィルター クエリの人間が読めるバージョンはfilter=name eq 'Tech'です。 エンコードされたバージョンは、リクエストを行う際に適切なフォーマットを保証するために URL で使用されます。
クリエイターデータの維持
語彙をインポートするときは、クエリパラメータ importCreatorStrategy を使用して、作成者データの処理方法を定義します。 creatorStrategy パラメータは、作成者がターゲット システムに存在しない場合に何が起こるかを決定します。
次のパラメータを使用できます:
-
creatorStrategy=INSERT指定された作成者がターゲット システムに存在しない場合は、新しいユーザーが作成者として追加されるようにします。 これは、
importCreatorStrategy=KEEP_CREATORを使用して、インポート中に不足しているクリエイターが追加されるようにする場合に必要です。 -
importCreatorStrategy=KEEP_CREATORエクスポートされたデータに指定された元の作成者を保持します。 作成者がターゲット システムに存在しない場合は、
creatorStrategy=INSERTも設定されていない限り、インポートは失敗します。 -
importCreatorStrategy=OVERWRITE_CREATOR元の作成者をインポートするユーザーに置き換えます。 インポートされたすべての語彙は、元の作成者の情報に関係なく、インポートを実行したユーザーに割り当てられます。
importCreatorStrategy が省略された場合、システムはデフォルトで OVERWRITE_CREATORを使用します。
以下に例を示します。
curl \
"http://localhost:8080/o/headless-batch-engine/v1.0/import-task/com.liferay.headless.admin.taxonomy.dto.v1_0.TaxonomyVocabulary?siteId=20110&creatorStrategy=INSERT&importCreatorStrategy=KEEP_CREATOR" \
--data-raw '
[
{
"name": "Example Vocabulary",
"description": "A sample vocabulary for testing."
}
]' \
--header "Content-Type: application/json" \
--request "POST" \
--user "test@liferay.com:learn"