REST API を使用した Web コンテンツ構造とテンプレートの管理
ウェブコンテンツ構造とは、ウェブコンテンツ記事に含まれる情報を定義するものです。 構造化することで、ウェブコンテンツの作成と管理が容易になり、同時にコンテンツに必要な情報がすべて含まれていることが保証されます。
構造をWebコンテンツテンプレートに関連付けることができます。 テンプレートは、ページ上でコンテンツフィールドがどのように表示されるかを決定します。 以下の表は、Liferay DXP REST API を構造とテンプレートを使用して利用する際に利用可能なオプションをまとめたものです。
| 利用可能なオプション | 利用不可のオプション |
|---|---|
| 構造とテンプレートの情報を収集する | 構造またはテンプレートを作成する |
| 構造物の権限を置き換える | 構造またはテンプレートを削除する |
構造化コンテンツの管理方法を学ぶために、いくつかの cURL および Java コードサンプルを含む、事前に構築された Liferay DXP Docker イメージを使用します。
環境設定
Liferay DXP の新しいインスタンスを起動するには、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/dxp:2026.q1.9-lts
http://localhost:8080 に、メールアドレス test@liferay.com とパスワード test を使用して Liferay にサインインします。 プロンプトが表示されたら、パスワードを learn に変更してください。
次に、以下の手順に従ってください。
-
サンプルプロジェクトをダウンロードして解凍します。
curl https://resources.learn.liferay.com/examples/liferay-m7b1.zip -Ounzip liferay-m7b1.zip警告これらのスクリプトは基本認証を使用しており、テスト用に設計されています。 Liferay DXPの本番環境では、基本認証を使用しないでください。
サイトIDを特定します
-
サイトメニュー (
) を開き、 設定 → サイト設定 に移動します。 -
プラットフォーム セクションで、 サイト構成 をクリックします。
-
[Site ID]の下でサイト識別子を見つけます。

ウェブコンテンツ構造とテンプレートサンプルの作成
構造やテンプレートは、ユーザーインターフェースを通して手動でのみ作成できます。
基本的な 構造 と、その構造に基づいた基本的な テンプレート を作成します。 このチュートリアルでは、単一のテキスト フィールドを持つ基本的な構造を使用して、 ContentStructure サービスを説明します。

Webコンテンツ構造IDを特定します
-
サイト メニュー (
) を開き、 コンテンツ & データ → Web コンテンツ に移動します。 -
構造 タブをクリックします。
-
「ID」列に、構造物のIDを記入してください。
利用するサービスを特定する
Web コンテンツを管理するには、Liferay DXP Headless Delivery API の StructuredContent サービスを使用します。 このサービスとすべての異なるHTTPメソッドを特定するには、Liferay API Explorerを使用してください。 詳細については、 REST サービスの利用 を参照してください。
サイトからウェブコンテンツ構造を取得する
ContentStructures_GET_FromSites.sh cURL スクリプトは、既存の構造を一覧表示します。 このスクリプトは、サイトIDを唯一のパラメーターとして、GET HTTPメソッドでContentStructureサービスを使用します。
| メソッド | サービス | 終点 |
|---|---|---|
| 得る | コンテンツ構造 | /v1.0/sites//content-structures |
ContentStructures_GET_FromSites.sh スクリプトでは、 ${1} パラメータは siteID を参照します。 スクリプトを実行する際は、例にあるサイトID(20125)の代わりに、ご自身のサイトIDを使用してください。
./ContentStructures_GET_FromSites.sh 20125
以下のコードは、スクリプトによって生成されたJSON出力を示しています。 このスクリプトは、サイト内のすべての構造物を返します。 この例では、 id と name で識別される単一の構造を見ることができます。
{
"アクション" : { },
"ファセット" : [ ],
"アイテム" : [ {
"利用可能な言語" : [ "en-US" ],
"contentStructureFields" : [ {
"dataType" : "string",
"inputControl" : "テキスト"、
"ラベル" : "テキスト"、
"ローカライズ可能" : true、
"複数" : false、
"名前" : "Text86549034"、
"nestedContentStructureFields" : [ ]、
"オプション" : [ ],
"定義値" : "",
"繰り返し可能" : false,
"必須" : false,
"showLabel" : true
} ],
"creator" : {
"additionalName" : ""、
"コンテンツタイプ" : "ユーザーアカウント"、
"家族名" : "ボウマン"、
"givenName" : "David"、
"id" : 20129、
"name" : "David Bowman"
},
"dateCreated" : "2021-08-02T13:15:42Z",
"dateModified" : "2021-08-02T13:16:57Z"、
"説明" : ""、
"ID" : 41837、
"名前" : "単純な構造"、
"サイト ID" : 20125
} ],
"lastPage" : 1,
"ページ" : 1、
"ページサイズ" : 20、
"合計数" : 1
}
この構造には、 dataType セクションの contentStructureFields で説明されている単一の Text フィールドがあります。 構造に要素を追加すると、 contentStructureFields の下に追加のセクションが表示されます。 以下は、Text ("dataType": "string") と Image フィールド ("dataType": "image" ) を含む構造の JSON 出力の一部です。
{
"アクション": {},
"ファセット": [],
"アイテム": [
{
"利用可能な言語": ["en-US"],
"contentStructureFields": [
{
"dataType": "string",
"inputControl": "text",
"label": "Text",
"localizable": true、
"複数": false、
"名前": "Text86549034"、
"nestedContentStructureFields": [],
"オプション": [],
"定義値": "",
"繰り返し可能": false,
"required": false,
"showLabel": true
},
{
"dataType": "image"、
"ラベル": "画像"、
"ローカライズ可能": true、
"複数": false、
"名前": "Image96876678"、
"nestedContentStructureFields": []、
"オプション": []、
"predefinedValue": "{}",
"repeatable": false,
"required": false,
"showLabel": true
}
]
}
]
}
RESTサービスはJavaクライアントを使用して呼び出すこともできます。
-
curlフォルダからjavaフォルダに移動します。 -
ソースファイルをコンパイルします。
javac -classpath .:* *.java -
ContentStructures_GET_FromSites.javaクラスを実行します。siteIdの値を、ご自身のサイトのIDに置き換えてください。java -classpath .:* -DsiteId=1234 ContentStructures_GET_FromSites
詳細については、以下のコードを参照してください。
public class ContentStructures_GET_FromSites {
public static void main(String[] args) throws Exception {
ContentStructureResource.Builder builder =
ContentStructureResource.builder();
ContentStructureResource contentStructureResource =
builder.authentication(
"test@liferay.com", "learn"
).build();
System.out.println(
contentStructureResource.getSiteContentStructuresPage(
Long.valueOf(System.getProperty("siteId")), null, null, null,
Pagination.of(1, 2), null));
}
}
この Java クラスは ContentStructureResource API を使用して、特定の Liferay サイトからコンテンツ構造を取得します。 メインメソッドは、認証情報(test@liferay.com および learn)を使用して ContentStructureResource のインスタンスを構築します。 次に、サイト ID を getSiteContentStructuresPage() メソッドに渡して、サイトのコンテンツ構造のページ分割されたリストを取得します。 結果は System.out.println() を使用してコンソールに出力されます。 ページネーションは、1ページあたり2つの項目を表示するように設定されています。
サイトからウェブコンテンツテンプレートを入手
ContentTemplates_GET_FromSites.sh cURL スクリプトは、既存のテンプレートを一覧表示します。 このスクリプトは、サイトIDを唯一のパラメーターとして、GET HTTPメソッドでContentTemplateサービスを使用します。
| 方法 | サービス | 終点 |
|---|---|---|
| 得る | コンテンツテンプレート | /v1.0/sites//content-templates |
ContentTemplates_GET_FromSites.sh スクリプトでは、 ${1} パラメータは siteID を参照します。 スクリプトを実行する際は、例にあるサイトID(20125)の代わりに、ご自身のサイトIDを使用してください。
./ContentTemplates_GET_FromSites.sh 20125
以下は、スクリプトによって生成されたJSON出力の一部です。 このスクリプトは、サイト内のすべてのテンプレートを返します。 この例では、 id と name で識別される単一のテンプレートを確認できます。 contentStructureId は関連付けられた構造 ID に対応し、 templateScript はテンプレートを記述する FreeMarker テンプレート言語に対応します。
{
(...)
"availableLanguages" : [ "en-US" ],
"contentStructureId" : 41837,
"creator" : {
"additionalName" : ""、
"コンテンツタイプ" : "ユーザーアカウント"、
"家族名" : "ボウマン",
"与えられた名前" : "デビッド",
"ID" : 20129,
"名前" : "David Bowman"
},
"dateCreated" : "2021-08-02T13:24:32Z",
"dateModified" : "2021-08-02T14:33:24Z"、
"説明" : ""、
"ID" : "41847"、
"名前" : "シンプルテンプレート"、
"プログラミング言語" : "ftl"、
"siteId" : 20125,
"templateScript" : "<#if (Text86549034.getData())??>\n\t${Text86549034.getData()}\n</#if>"
} ],
"lastPage" : 1,
"ページ" : 1、
"ページサイズ" : 20、
"合計数" : 1
}
RESTサービスはJavaクライアントを使用して呼び出すこともできます。
-
curlフォルダからjavaフォルダに移動します。 -
ソースファイルをコンパイルしてください(まだコンパイルしていない場合):
javac -classpath .:* *.java -
ContentTemplates_GET_FromSites.javaクラスを実行します。siteIdの値を、ご自身のサイトのIDに置き換えてください。java -classpath .:* -DsiteId=1234 ContentTemplates_GET_FromSitesContentTemplates_GET_FromSites.javaはContentStructures_GET_FromSites.javaファイルと同様に動作します。 唯一の違いは、ContentTemplateResourceのインスタンスを構築することです。 そのため、異なるインポートが必要となり、代わりにgetSiteContentTemplatesPageメソッドを使用します。
ウェブコンテンツ構造の権限を取得する
ContentStructures_GET_Permissions_ById.sh cURL スクリプトは、Web コンテンツ構造の権限を一覧表示します。 このスクリプトは、ストラクチャーIDを唯一のパラメーターとして、GET HTTPメソッドでContentStructureサービスを使用します。
| メソッド | サービス | エンドポイント |
|---|---|---|
| GET | コンテンツ構造 | /v1.0/content-structures/{contentStructureId}/permissions |
ContentStructures_GET_Permissions_ById.sh スクリプトでは、 ${1} パラメータは contentStructureId を参照します。 スクリプトを実行する際は、例にあるID(41837)の代わりに、ご自身の構造物のIDを使用してください。
./ContentStructures_GET_Permissions_ById.sh 41837
JSON出力には、 項目 セクションの権限が含まれます。 この例では、 roleNameのサンプル構造に対する権限を持つロールは 1 つだけであり、権限のリストは actionIds にあります。
{
"アクション": {
"取得": {
"メソッド": "GET"、
"href": "http://localhost:8080/o/headless-delivery/v1.0/content-structures/41837/permissions"
},
"replace": {
"method": "PUT"、
"href": "http://localhost:8080/o/headless-delivery/v1.0/content-structures/41837/permissions"
}
}、
"ファセット": [],
"アイテム": [
{
"actionIds": ["DELETE", "権限"、 "更新"、 "表示"]、
"ロール名": "所有者"
}
]、
"lastPage": 1,
"ページ": 1,
"ページサイズ": 2,
"合計数": 2
}
権限の管理方法については、 Web コンテンツ構造とテンプレートへの権限の割り当て を参照してください。
RESTサービスはJavaクライアントを使用して呼び出すこともできます。
-
curlフォルダからjavaフォルダに移動します。 -
ソースファイルをコンパイルしてください(まだコンパイルしていない場合):
javac -classpath .:* *.java -
ContentStructures_GET_Permissions_ById.javaクラスを実行します。contentStructureIdの値を、ご使用の構造の ID に置き換えてください。java -classpath .:* -DcontentStructureId=1234 ContentStructures_GET_Permissions_ByIdContentStructures_GET_Permissions_ById.javaはContentStructures_GET_FromSites.javaファイルと同様に動作します。 唯一の違いは、メソッドがパラメータとしてLong contentStructureId(siteIdの代わりに) とString roleNamesを受け取ることです。roleNamesはnullに設定され、利用可能なすべての権限を返します。
ウェブコンテンツ構造の権限の置き換え
ContentStructures_PUT_Permissions_ById.sh cURL スクリプトは、 PUT HTTP メソッドと ContentStructure サービスを使用して、元の構造の権限を置き換えます。 このスクリプトには、パワーユーザー ロールに対する DELETE および VIEW 権限が含まれています。
| 方法 | サービス | 終点 |
|---|---|---|
| 置く | コンテンツ構造 | /v1.0/content-structures/{contentStructureId}/permissions |
ContentStructures_PUT_Permissions_ById.sh スクリプトでは、 ${1} パラメータは contentStructureId を参照します。 スクリプトを実行する際は、例にあるID(41837)の代わりに、ご自身の構造物のIDを使用してください。
./ContentStructures_PUT_Permissions_ById.sh 41837
JSON出力では、 項目 セクションの下に2つのエントリが表示され、それぞれの役割に対応しています。
{
"アクション": {
"取得": {
"メソッド": "GET"、
"href": "http://localhost:8080/o/headless-delivery/v1.0/content-structures/41837/permissions"
},
"replace": {
"method": "PUT"、
"href": "http://localhost:8080/o/headless-delivery/v1.0/content-structures/41837/permissions"
}
}、
"ファセット": [],
"アイテム": [
{
"actionIds": ["DELETE", "権限"、 "更新"、 "ビュー"]、
"ロール名": "所有者"
}、
{
"actionIds": ["DELETE", "VIEW"],
"roleName": "Power User"
}
],
"lastPage": 1,
"page": 1,
"pageSize": 2,
"totalCount": 2
}
パワーユーザーには、削除権限と表示権限が付与されました。
RESTサービスはJavaクライアントを使用して呼び出すこともできます。
-
curlフォルダからjavaフォルダに移動します。 -
ソースファイルをコンパイルしてください(まだコンパイルしていない場合):
javac -classpath .:* *.java -
ContentStructures_PUT_Permissions_ById.javaクラスを実行します。contentStructureIdの値を構造の ID に、actionIdsの値をアクションまたはアクションのリスト (カンマで区切る) に、roleNameの値を権限を更新するための目的のロールに置き換えてください。java -classpath .:* -Dactions="DELETE, UPDATE, VIEW" -DcontentStructureId=1234 -Drole="Power User" ContentStructures_GET_Permissions_ById
詳細については、以下のコードとそのコメントを参照してください。
public class ContentStructures_PUT_Permissions_ById {
public static void main(String[] args) throws Exception {
ContentStructureResource.Builder builder =
ContentStructureResource.builder();
ContentStructureResource contentStructureResource =
builder.authentication(
"test@liferay.com", "learn"
).build();
System.out.println(
contentStructureResource.putContentStructurePermissionsPage(
Long.valueOf(System.getProperty("contentStructureId")),
new Permission[] {
new Permission() {
{
actionIds = System.getProperty(
"actionIds"
).split(
"\\s*,\\s*"
);
roleName = System.getProperty("roleName");
}
}
}));
}
}
この Java クラスは、 ContentStructureResource API を使用してコンテンツ構造の権限を更新します。 メインメソッドは、提供された認証情報 (test@liferay.com と learn) を使用して API で認証し、コンテンツ構造 ID と Permission オブジェクトの配列を putContentStructurePermissionsPage() メソッドに渡します。 各 Permission オブジェクトが作成され、 roleName システム プロパティに基づいてロール名が設定されます。 結果はコンソールに表示されます。