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

ナビゲーションメニューAPIの基本

LiferayのREST APIは、Liferayのナビゲーションメニューにサービスを提供します。 APIを使用してナビゲーションメニューを作成および編集できます。 まずは、新しいナビゲーションメニューを追加する例を見てみましょう。

Liferay DXP 2025.Q2+ ナビゲーションメニュー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に変更します。

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

  1. カテゴリと語彙 API の基礎をダウンロードして解凍します。

    curl https://resources.learn.liferay.com/examples/liferay-p7s4.zip -O
    
    unzip liferay-p7s4.zip
    
  2. サイトIDを見つけます。 以下のさまざまなサービス呼び出しで使用します。

  3. cURLスクリプトを使用して、サイトに新しいナビゲーションメニューを追加します。 コマンドラインで、curlフォルダに移動します。 NavigationMenus_POST_ToSites.sh スクリプトを、 サイト ID をパラメータとして実行します。

    ./NavigationMenus_POST_ToSites.sh 1234
    

    JSONのレスポンスには、新しいナビゲーションメニューが追加されたことが示されています。

    {
    "creator" : {
       "additionalName" : "",
       "contentType" : "UserAccount",
       "familyName" : "Test",
       "givenName" : "Test",
       "id" : 20129,
       "name" : "Test Test"
    },
    "dateCreated" : "2021-09-09T21:41:31Z",
    "dateModified" : "2021-09-09T21:41:31Z",
    "id" : 40131,
    "name" : "Foo",
    "navigationMenuItems" : [ ],
    "siteId" : 20125
    }
    
  4. 管理メニューサイトビルダーナビゲーション メニューに移動して、ナビゲーション メニュー アプリケーションに移動します。 新しいナビゲーションメニューが追加されたことを確認してください。

    新しいナビゲーションメニューが追加されたことを確認してください。

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

    javac -classpath .:* *.java
    
  6. 次のコマンドで NavigationMenus_POST_ToSites クラスを実行します。 siteId の値をサイト ID に置き換えます。

    java -classpath .:* -DsiteId=1234 NavigationMenus_POST_ToSites
    

cURLコマンドの検証

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

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/sites/${1}/navigation-menus" \
	--data-binary '
		{
			"name": "Foo"
		}' \
	--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-delivery/v1.0/sites/${1}/navigation-menus"RESTサービスのエンドポイント
-d "{\"name\": \"Foo\"}"お客様が掲載を希望するデータ
-u "test@liferay.com:learn"基本的な認証情報

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

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

Javaクラスを調べる

NavigationMenus_POST_ToSites.java クラスは、ナビゲーション メニュー関連のサービスを呼び出してナビゲーション メニューを追加します。

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

	NavigationMenuResource navigationMenuResource = builder.authentication(
		"test@liferay.com", "learn"
	).build();

	NavigationMenu navigationMenu =
		navigationMenuResource.postSiteNavigationMenu(
			Long.valueOf(System.getProperty("siteId")),
			new NavigationMenu() {
				{
					name = "Foo";
				}
			});

	System.out.println(navigationMenu);
}

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

行(省略形)説明
NavigationMenuResource.Builder builder = ...Builderを取得し、NavigationMenuResourceサービスインスタンスを生成します。
NavigationMenuResource navigationMenuResource = builder.authentication(...).build();基本認証を指定し、NavigationMenuResourceサービスインスタンスを生成します。
NavigationMenu navigationMenu = navigationMenuResource.postSiteNavigationMenu(...);navigationMenuResource.postSiteNavigationMenuメソッドを呼び出し、投稿するデータを渡します。

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

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

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

重要

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

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

サイトからナビゲーションメニューを取得する

次のcURLまたはJavaコマンドを実行すると、サイトのナビゲーションメニューを一覧表示できます。 上記のように、 1234 をサイト ID に置き換えます。

コマンド:

./NavigationMenus_GET_FromSites.sh 1234

コード:

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/sites/${1}/navigation-menus" \
	--user "test@liferay.com:learn"

コマンド:

java -classpath .:* -DsiteId=1234 NavigationMenus_GET_FromSites

コード:

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

	NavigationMenuResource navigationMenuResource = builder.authentication(
		"test@liferay.com", "learn"
	).build();

	Page<NavigationMenu> page =
		navigationMenuResource.getSiteNavigationMenusPage(
			Long.valueOf(System.getProperty("siteId")),
			Pagination.of(1, 2));

	System.out.println(page);
}

サイトの NavigationMenu オブジェクトは JSON 形式で表示されます。

ナビゲーションメニューを取得する

以下のcURLまたはJavaコマンドで特定のナビゲーションメニューを取得します。 1234 をナビゲーションメニューのIDに置き換えてください。

ヒント

NavigationMenus_GET_FromSites.[java|sh] を使用して NavigationMenu ID を取得します。

コマンド:

./NavigationMenus_GET_ById.sh 1234

コード:

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/navigation-menus/${1}" \
	--user "test@liferay.com:learn"

コマンド:

java -classpath .:* -DnavigationMenuId=1234 NavigationMenus_GET_ById

コード:

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

	NavigationMenuResource navigationMenuResource = builder.authentication(
		"test@liferay.com", "learn"
	).build();

	System.out.println(
		navigationMenuResource.getNavigationMenu(
			Long.valueOf(System.getProperty("navigationMenuId"))));
}

NavigationMenu フィールドが JSON に表示されます。

ナビゲーションメニューを配置する

次のcURLおよびJavaコマンドを使用して、既存のナビゲーションメニューを完全に上書きします。 なお、 1234 は、ナビゲーションメニューのIDに置き換えてください。

コマンド:

./NavigationMenus_PUT_ById.sh 1234

コード:

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/navigation-menus/${1}" \
	--data-binary '
		{
			"name": "Bar"
		}' \
	--header "Content-Type: application/json" \
	--request "PUT" \
	--user "test@liferay.com:learn"

コマンド:

java -classpath .:* -DnavigationMenuId=1234 NavigationMenus_PUT_ById

コード:

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

	NavigationMenuResource navigationMenuResource = builder.authentication(
		"test@liferay.com", "learn"
	).build();

	NavigationMenu navigationMenu =
		navigationMenuResource.putNavigationMenu(
			Long.valueOf(System.getProperty("navigationMenuId")),
			new NavigationMenu() {
				{
					name = "Bar";
				}
			});

	System.out.println(navigationMenu);
}

ナビゲーションメニューを削除する

以下のcURLおよびJavaコマンドで既存のナビゲーションメニューを削除します。 なお、 1234 は、ナビゲーションメニューのIDに置き換えてください。

コマンド:

./NavigationMenus_DELETE_ById.sh 1234

コード:

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/navigation-menus/${1}" \
	--request "DELETE" \
	--user "test@liferay.com:learn"

コマンド:

java -classpath .:* -DnavigationMenuId=1234 NavigationMenus_DELETE_ById

コード:

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

	NavigationMenuResource navigationMenuResource = builder.authentication(
		"test@liferay.com", "learn"
	).build();

	navigationMenuResource.deleteNavigationMenu(
		Long.valueOf(System.getProperty("navigationMenuId")));
}

API エクスプローラー には、すべての ナビゲーションメニュー サービスとスキーマが一覧表示され、各サービスを試すためのインターフェースがあります。

ライフレイ DXP 2025年第3四半期

ナビゲーション メニュー API は、Liferay インスタンス間でサイト ナビゲーション メニューと関連エンティティを移行するためのバッチ エクスポートとインポートをサポートしています。 このプロセスには、関連する 権限のエクスポートとインポート、作成日や変更日などの属性に基づいたユーザー定義の フィルター の適用、およびインポート中の 作成者データの維持 が含まれます。

バッチ エンジンの使用の詳細については、「バッチ エンジン API を使用したデータの エクスポート および インポート 」を参照してください。

これらの API エンドポイントを使用して、ナビゲーション メニューの権限を管理します。 例の ${1} をサイト ID またはナビゲーション メニュー ID に置き換えます。

  1. 権限付きナビゲーションメニューを作成する

    作成時にナビゲーション メニュー エンドポイントに POST リクエストを送信して、カスタム権限を割り当てます。 指定されたロールはシステムにすでに存在している必要があります。 指定されたロールが存在しない場合、API は 404 エラーを返します。

    例:

    curl \
    	"http://localhost:8080/o/headless-delivery/v1.0/sites/${1}/navigation-menus" \
    	--data-binary '
    		{
    			"name": "Main Menu",
    			"permissions": [
    				{
    					"roleName": "Owner",
    					"actionIds": ["VIEW", "UPDATE"]
    				}
    			]
    		}' \
    	--header "Content-Type: application/json" \
    	--request "POST" \
    	--user "test@liferay.com:learn"
    

    権限 配列は、ナビゲーション メニューのロールおよびそれに関連付けられた権限を指定します。 権限を宣言しない場合は、ロールに割り当てられたデフォルトの権限でメニューが作成されます。

  2. ナビゲーションメニューの権限を取得する

    デフォルトでは、応答に権限は含まれません。 これらを取得するには、クエリに nestedFields=permissions を追加します。

    例:

    curl \
       "http://localhost:8080/o/headless-delivery/v1.0/sites/20126/navigation-menus?nestedFields=permissions" \
       --user "test@liferay.com:learn"
    
  3. ナビゲーションメニューの権限を更新する

    PUT リクエストを使用して、既存のナビゲーション メニューの権限を更新します。 ${1} をナビゲーション メニュー ID に置き換えます。

    ヒント

    ナビゲーション メニュー ID は、 サイトからナビゲーション メニューを取得するときに見つけることができます。

    例:

    curl \
    "http://localhost:8080/o/headless-delivery/v1.0/navigation-menus/${1}/permissions" \
    --data-binary '
       [
          {
             "actionIds": ["VIEW", "UPDATE", "DELETE", "PERMISSIONS"],
             "roleName": "Owner"
          }
       ]' \
    --header "Content-Type: application/json" \
    --request "PUT" \
    --user "test@liferay.com:learn"
    

データをフィルタリング

フィルターを使用して、取得またはエクスポートするナビゲーション メニューを絞り込むことができます。 フィルターは次の 2 つのコンテキストで機能します。

  1. getSiteNavigationMenusPage エンドポイントを使用して、フィルターされたナビゲーション メニューを取得します。 フィルター パラメータを使用して必要なメニューのみを取得します。

    curl \
       "http://localhost:8080/o/headless-delivery/v1.0/sites/20126/navigation-menus?filter=dateCreated%20le%202025-07-18T14%3A25%3A00Z&sort=dateCreated%3Adesc" \
       --header "Content-Type: application/json" \
       --request "GET" \
       --user "test@liferay.com:learn"
    

    クエリ パラメータの動作は次のとおりです。

    パラメーター説明
    http://localhost:8080/o/headless-delivery/v1.0/sites/20126/navigation-menusヘッドレス配信 API を使用してサイト 20126 のナビゲーション メニューを取得するためのエンドポイント。
    filter=dateCreated%20le%202025-07-18T14%3A25%3A00ZURL エンコードされています。 2025 年 7 月 18 日 14:25 UTC 以前に作成されたメニューのみが含まれるように結果を絞り込みます。
    sort=dateCreated%3AdescURL エンコードされています。 結果を dateCreated の降順 (最新のものから順に) で並べ替えます。
    ヒント

    特定のナビゲーション メニューを名前で取得するには、 search= パラメータを追加します。 例えば、

    http://localhost:8080/o/headless-delivery/v1.0/sites/20126/navigation-menus?filter=dateCreated%20le%202025-07-18T14%3A25%3A00Z&search=Main&sort=dateModified:desc

    これは、名前に Main が含まれるナビゲーション メニューのみを取得します。

  2. postSiteNavigationMenusPageExportBatch エンドポイントを使用して、フィルターされたナビゲーション メニューをエクスポートします。 同じフィルター構文を使用して、エクスポート ファイルに含めるメニューを制限します。

    curl \
       "http://localhost:8080/o/headless-delivery/v1.0/sites/20126/navigation-menus/export-batch?filter=dateCreated%20ge%202025-07-17T00%3A00%3A00Z&search=Main&sort=dateModified%3Adesc" \
       --data-binary '' \
       --header "Content-Type: application/json" \
       --request "POST" \
       --user "test@liferay.com:learn"
    

    クエリ パラメータの動作は次のとおりです。

    パラメーター説明
    http://localhost:8080/o/headless-delivery/v1.0/sites/20126/navigation-menus/export-batchサイト上のナビゲーション メニューのエクスポート バッチを開始するエンドポイント 20126
    filter=dateCreated%20ge%202025-07-17T00%3A00%3A00ZURL エンコードされています。 エクスポートを、2025 年 7 月 17 日午前 0 時 (UTC) 以降に作成されたメニューに制限します。
    search=Mainエクスポートされたメニューを、名前に「Main」(大文字と小文字は区別されません)が含まれるメニューにフィルターします。
    sort=dateModified%3AdescURL エンコードされています。 エクスポートされたメニューを dateModified の降順 (最新のものから順に) で並べ替えます。
    --data-binary ''フィルタリングと並べ替えはクエリ パラメータによって完全に制御されるため、本文は空です。

クリエイターデータの維持

ナビゲーション メニューをインポートするときに、 importCreatorStrategy および creatorStrategy クエリ パラメータを使用して、作成者情報の処理方法を制御できます。

パラメーター説明
creatorStrategy=INSERT指定された作成者がターゲット システムに存在しない場合は、新しいユーザーを作成者として追加します。 importCreatorStrategy=KEEP_CREATORを使用する場合に必須です。
importCreatorStrategy=KEEP_CREATORエクスポートされたデータから元の作成者を保持します。 creatorStrategy=INSERT も設定されていない限り、作成者が存在しない場合はインポートは失敗します。
importCreatorStrategy=OVERWRITE_CREATOR元の作成者をインポートするユーザーに置き換えます。 インポートされたすべてのナビゲーション メニューは、インポートを実行したユーザーに割り当てられます。 省略した場合はこれがデフォルトになります。

以下に例を示します。

curl \
   "http://localhost:8080/o/headless-batch-engine/v1.0/import-task/com.liferay.headless.delivery.dto.v1_0.NavigationMenu?siteId=20126&creatorStrategy=INSERT&importCreatorStrategy=KEEP_CREATOR" \
   --data-raw '
   [
      {
         "name": "Secondary Menu",
         "externalReferenceCode": "secondary-menu-001",
         "navigationType": "Primary"
      }
   ]' \
   --header "Content-Type: application/json" \
   --request "POST" \
   --user "test@liferay.com:learn"