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

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 に変更してください。

次に、以下の手順に従ってください。

  1. サンプルプロジェクトをダウンロードして解凍します。

    curl https://resources.learn.liferay.com/examples/liferay-m7b1.zip -O
    
    unzip liferay-m7b1.zip
    
    警告

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

サイトIDを特定します

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

  2. プラットフォーム セクションで、 サイト構成 をクリックします。

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

    サイトIDは、「サイト設定」および「サイト構成」オプションで確認できます。

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

注記

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

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

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

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

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

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

  3. 「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クライアントを使用して呼び出すこともできます。

  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() を使用してコンソールに出力されます。 ページネーションは、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クライアントを使用して呼び出すこともできます。

  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 メソッドを使用します。

ウェブコンテンツ構造の権限を取得する

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クライアントを使用して呼び出すこともできます。

  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 を受け取ることです。 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クライアントを使用して呼び出すこともできます。

  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 システム プロパティに基づいてロール名が設定されます。 結果はコンソールに表示されます。