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

REST API を使用した Web コンテンツの構造とテンプレートの管理

Web コンテンツ構造は、Web コンテンツ記事に含まれる情報を定義します。 構造により、Web コンテンツの作成と管理が容易になり、コンテンツに必要な情報がすべて含まれるようになります。

構造を Web コンテンツ テンプレートに関連付けることができます。 テンプレートは、コンテンツ フィールドがページ上でどのようにレンダリングされるかを決定します。 以下の表は、構造とテンプレートを備えた Liferay DXP REST API を使用して利用可能なオプションをまとめたものです。

利用可能なオプション利用不可のオプション
構造とテンプレート情報を収集する構造またはテンプレートを作成する
構造の権限を置き換える構造またはテンプレートを削除する

構造化コンテンツの管理方法を学ぶには、いくつかの cURL および Java コードサンプルを含む、事前に構築された Liferay DXP Docker イメージを使用します。

環境のセットアップ

新しい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-m7b1.zip -O
    
    unzip liferay-m7b1.zip
    
    警告

    これらのスクリプトは基本認証を使用し、テスト用に設計されています。 本番のLiferay DXP環境では、基本認証を使用しないでください。

サイトIDを特定します。

  1. サイトメニュー (Site menu) を開き、 構成サイト設定に移動します。

  2. プラットフォームセクションで、[Site Configuration]をクリックします。

  3. [Site ID]の下でサイト識別子を見つけます。

    サイト設定とサイト構成オプションでサイト ID を見つけます。

Webコンテンツ構造とテンプレートサンプルの作成

構造またはテンプレートは、ユーザー インターフェイスを通じて手動でのみ作成できます。

基本的な 構造 と、その構造に基づいた基本的な テンプレート を作成します。 このチュートリアルでは、単一のテキスト フィールドを含む基本構造を使用して、 ContentStructure サービスを説明します。

単一のテキスト フィールドを使用する基本的なサンプル構造。

Webコンテンツ構造IDを特定する

  1. サイトメニュー (Site menu) を開き、 コンテンツ & データWeb コンテンツに移動します。

  2. 構造 タブをクリックします。

  3. ID 列の下で、構造の ID を特定します。

使用するサービスの特定

Liferay DXP Headless Delivery API の StructuredContent サービスを使用して、Web コンテンツを管理します。 このサービスとすべての異なるHTTPメソッドを識別するには、Liferay APIエクスプローラーを使用します。 詳細については、「 REST サービスの使用」を参照してください。

サイトからWebコンテンツ構造を取得する

ContentStructures_GET_FromSites.sh cURL スクリプトは、既存の構造を一覧表示します。 このスクリプトは、サイトIDを唯一のパラメーターとして、GET HTTPメソッドでContentStructureサービスを使用します。

メソッドサービスエンドポイント
GETContentStructure/v1.0/sites//コンテンツ構造

ContentStructures_GET_FromSites.sh スクリプトでは、 ${1} パラメータは siteIDを参照します。 スクリプトを実行するときは、例のサイト ID (20125) ではなく、自分のサイト ID を使用してください。

./ContentStructures_GET_FromSites.sh 20125

次のコードは、スクリプトが生成するJSON出力を示しています。 スクリプトはサイト内のすべての構造を返します。 この例では、 idnameで識別される単一の構造を確認できます。

{
   "actions" : { },
   "facets" : [ ],
   "items" : [ {
      "availableLanguages" : [ "en-US" ],
      "contentStructureFields" : [ {
      "dataType" : "string",
      "inputControl" : "text",
      "label" : "Text",
      "localizable" : true,
      "multiple" : false,
      "name" : "Text86549034",
      "nestedContentStructureFields" : [ ],
      "options" : [ ],
      "predefinedValue" : "",
      "repeatable" : false,
      "required" : false,
      "showLabel" : true
      } ],
      "creator" : {
      "additionalName" : "",
      "contentType" : "UserAccount",
      "familyName" : "Bowman",
      "givenName" : "David",
      "id" : 20129,
      "name" : "David Bowman"
      },
      "dateCreated" : "2021-08-02T13:15:42Z",
      "dateModified" : "2021-08-02T13:16:57Z",
      "description" : "",
      "id" : 41837,
      "name" : "Simple Structure",
      "siteId" : 20125
   } ],
   "lastPage" : 1,
   "page" : 1,
   "pageSize" : 20,
   "totalCount" : 1
}

この構造には、 dataType セクションの contentStructureFieldsに記述されている 1 つの Text フィールドがあります。 構造にさらに要素を追加すると、 contentStructureFieldsの下に追加のセクションが表示されます。 以下は、テキスト ("dataType": "string") とイメージ フィールド ("dataType": "image") を持つ構造の部分的な JSON 出力です。

{
  "actions": {},
  "facets": [],
  "items": [
    {
      "availableLanguages": ["en-US"],
      "contentStructureFields": [
        {
          "dataType": "string",
          "inputControl": "text",
          "label": "Text",
          "localizable": true,
          "multiple": false,
          "name": "Text86549034",
          "nestedContentStructureFields": [],
          "options": [],
          "predefinedValue": "",
          "repeatable": false,
          "required": false,
          "showLabel": true
        },
        {
          "dataType": "image",
          "label": "Image",
          "localizable": true,
          "multiple": false,
          "name": "Image96876678",
          "nestedContentStructureFields": [],
          "options": [],
          "predefinedValue": "{}",
          "repeatable": false,
          "required": false,
          "showLabel": true
        }
      ]
    }
  ]
}

RESTサービスは、Javaクライアントを使って呼び出すこともできます。

  1. curl フォルダから、 java フォルダに移動します。

  2. ソースファイルをコンパイルします。

    javac -classpath .:* *.java
    
  3. 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()を使用してコンソールに出力されます。 ページ区切りは、ページごとに 2 つの項目を含む最初のページを返すように設定されています。

サイトからWebコンテンツテンプレートを取得する

ContentTemplates_GET_FromSites.sh cURL スクリプトは、既存のテンプレートの一覧を表示します。 このスクリプトは、サイトIDを唯一のパラメーターとして、GET HTTPメソッドでContentTemplateサービスを使用します。

メソッドサービスエンドポイント
GETContentTemplate/v1.0/sites//content-templates

ContentTemplates_GET_FromSites.sh スクリプトでは、 ${1} パラメータは siteIDを参照します。 スクリプトを実行するときは、例のサイト ID (20125) ではなく、自分のサイト ID を使用してください。

./ContentTemplates_GET_FromSites.sh 20125

以下は、このスクリプトが生成するJSON出力の一部です。 スクリプトはサイト内のすべてのテンプレートを返します。 この例では、 idnameで識別される単一のテンプレートを確認できます。 contentStructureId は関連付けられている構造 ID に対応し、 templateScript はテンプレートを記述する FreeMarker テンプレート言語に対応します。

{
  (...)
    "availableLanguages" : [ "en-US" ],
    "contentStructureId" : 41837,
    "creator" : {
      "additionalName" : "",
      "contentType" : "UserAccount",
      "familyName" : "Bowman",
      "givenName" : "David",
      "id" : 20129,
      "name" : "David Bowman"
    },
    "dateCreated" : "2021-08-02T13:24:32Z",
    "dateModified" : "2021-08-02T14:33:24Z",
    "description" : "",
    "id" : "41847",
    "name" : "Simple Template",
    "programmingLanguage" : "ftl",
    "siteId" : 20125,
    "templateScript" : "<#if (Text86549034.getData())??>\n\t${Text86549034.getData()}\n</#if>"
  } ],
  "lastPage" : 1,
  "page" : 1,
  "pageSize" : 20,
  "totalCount" : 1
}

RESTサービスは、Javaクライアントを使って呼び出すこともできます。

  1. curl フォルダから、 java フォルダに移動します。

  2. ソース ファイルをコンパイルします (まだコンパイルしていない場合)。

    javac -classpath .:* *.java
    
  3. ContentTemplates_GET_FromSites.java クラスを実行します。 siteId値をサイトのIDに置き換えます。

    java -classpath .:* -DsiteId=1234 ContentTemplates_GET_FromSites
    

    ContentTemplates_GET_FromSites.java は、 ContentStructures_GET_FromSites.java ファイルと同様に動作します。 唯一の違いは、 ContentTemplateResourceのインスタンスを構築することです。 そのため、別のインポートが必要になり、代わりに getSiteContentTemplatesPage メソッドが使用されます。

Webコンテンツ構造の権限を取得する

ContentStructures_GET_Permissions_ById.sh cURL スクリプトは、Web コンテンツ構造の権限を一覧表示します。 このスクリプトは、ストラクチャーIDを唯一のパラメーターとして、GET HTTPメソッドでContentStructureサービスを使用します。

メソッドサービスエンドポイント
GETContentStructure/v1.0/content-structures/{contentStructureId}/permissions

ContentStructures_GET_Permissions_ById.sh スクリプトでは、 ${1} パラメータは contentStructureIdを参照します。 スクリプトを実行するときは、例の ID (41837) ではなく、構造体の ID を使用してください。

./ContentStructures_GET_Permissions_ById.sh 41837

JSON出力には、itemsセクションの下に権限が含まれます。 この例では、サンプル構造に対する権限を持つロールは roleNameに 1 つだけあり、権限のリストは actionIdsにあります。

{
  "actions": {
    "get": {
      "method": "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"
    }
  },
  "facets": [],
  "items": [
    {
      "actionIds": ["DELETE", "PERMISSIONS", "UPDATE", "VIEW"],
      "roleName": "Owner"
    }
  ],
  "lastPage": 1,
  "page": 1,
  "pageSize": 2,
  "totalCount": 2
}

権限の管理方法については、「 Web コンテンツ構造とテンプレートへの権限の割り当て」を参照してください。

RESTサービスは、Javaクライアントを使って呼び出すこともできます。

  1. curl フォルダから、 java フォルダに移動します。

  2. ソース ファイルをコンパイルします (まだコンパイルしていない場合)。

    javac -classpath .:* *.java
    
  3. ContentStructures_GET_Permissions_ById.java クラスを実行します。 contentStructureId の値を構造体の ID に置き換えます。

    java -classpath .:* -DcontentStructureId=1234 ContentStructures_GET_Permissions_ById
    

    ContentStructures_GET_Permissions_ById.java は、 ContentStructures_GET_FromSites.java ファイルと同様に動作します。 唯一の違いは、メソッドがパラメーターとして Long contentStructureId ( siteIdの代わりに) と String roleNames を受け取ることです。 利用可能なすべての権限を返すために、roleNamesnull として設定されます。

Webコンテンツ構造の権限の置き換え

ContentStructures_PUT_Permissions_ById.sh cURL スクリプトは、 PUT HTTP メソッドを ContentStructure サービスと共に使用して、元の構造の権限を置き換えます。 このスクリプトには、Power User ロールの DELETE および VIEW 権限が含まれています。

メソッドサービスエンドポイント
PUTContentStructure/v1.0/content-structures/{contentStructureId}/permissions

ContentStructures_PUT_Permissions_ById.sh スクリプトでは、 ${1} パラメータは contentStructureIdを参照します。 スクリプトを実行するときは、例の ID (41837) ではなく、構造体の ID を使用してください。

./ContentStructures_PUT_Permissions_ById.sh 41837

JSON 出力には、 items セクションの下に、ロールごとに 1 つずつ、2 つのエントリが表示されます。

{
  "actions": {
    "get": {
      "method": "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"
    }
  },
  "facets": [],
  "items": [
    {
      "actionIds": ["DELETE", "PERMISSIONS", "UPDATE", "VIEW"],
      "roleName": "Owner"
    },
    {
      "actionIds": ["DELETE", "VIEW"],
      "roleName": "Power User"
    }
  ],
  "lastPage": 1,
  "page": 1,
  "pageSize": 2,
  "totalCount": 2
}

パワーユーザーには削除権限と表示権限が付与されました。

RESTサービスは、Javaクライアントを使って呼び出すこともできます。

  1. curl フォルダから、 java フォルダに移動します。

  2. ソース ファイルをコンパイルします (まだコンパイルしていない場合)。

    javac -classpath .:* *.java
    
  3. 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 システム プロパティに基づいて設定されます。 結果がコンソールに出力されます。