ナビゲーションメニューAPIの基本
LiferayのREST APIは、Liferayのナビゲーションメニューにサービスを提供します。 APIを使用してナビゲーションメニューを作成および編集できます。 まずは、新しいナビゲーションメニューを追加する例を見てみましょう。
ナビゲーションメニューの追加
新しいLiferay DXPインスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/dxp:2024.q2.11。
メールアドレス test@liferay.com とパスワード test を使用して、http://localhost:8080でLiferayにサインインしてください。 プロンプトが表示されたら、パスワードを learn に変更します。
次に、以下の手順を実行します。
-
Categories and Vocabulary API Basics をダウンロードして解凍します。
curl https://resources.learn.liferay.com/dxp/latest/en/site-building/site-navigation/developer-guide/liferay-p7s4.zip -O
unzip liferay-p7s4.zip
-
サイトのIDを検索します 。 これは、以下のさまざまなサービス呼び出しで使用します。
-
cURLスクリプトを使用して、サイトに新しいナビゲーションメニューを追加します。 コマンドラインで、
curl
フォルダに移動します。 サイトIDをパラメーターとして使用して、NavigationMenu_POST_ToSite.sh
スクリプトを実行します。./NavigationMenu_POST_ToSite.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 }
-
[Administration Menu] → [サイトビルダー] → [Navigation Menus] に移動して、ナビゲーションメニューアプリケーションに移動します。 新しいナビゲーションメニューが追加されたことを確認してください。
-
RESTサービスは、Javaクライアントを使って呼び出すこともできます。
curl
フォルダから、java
フォルダに移動します。 以下のコマンドでソースファイルをコンパイルします。javac -classpath .:* *.java
-
以下のコマンドを使用して
NavigationMenu_POST_ToSite
クラスを実行します。siteId
値をサイトのIDに置き換えます。java -classpath .:* -DsiteId=1234 NavigationMenu_POST_ToSite
cURLコマンドの検証
NavigationMenu_POST_ToSite.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クラスを調べる
NavigationMenu_POST_ToSite.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エクスプローラーで確認できます。
main``メソッドのコメントでは、クラスの実行を実演しています。
他の例のJavaクラスはこれと類似していますが、異なるNavigationMenuResource
メソッドを呼び出します。
サービスの詳細は、 NavigationMenuResource を参照してください。
以下は、cURLとJavaを使って、他のNavigationMenu
RESTサービスを呼び出す例です。
サイトからナビゲーションメニューを取得する
次のcURLまたはJavaコマンドを実行すると、サイトのナビゲーションメニューを一覧表示できます。 上記のように、1234
をサイトのIDに置き換えてください。
NavigationMenus_GET_FromSite.sh
コマンド:
./NavigationMenus_GET_FromSite.sh 1234
コード:
curl \
"http://localhost:8080/o/headless-delivery/v1.0/sites/${1}/navigation-menus" \
--user "test@liferay.com:learn"
NavigationMenus_GET_FromSite.java
コマンド:
java -classpath .:* -DsiteId=1234 NavigationMenus_GET_FromSite
コード:
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_FromSite.[java|sh]
を使用して、NavigationMenu
IDを取得します。
NavigationMenu_GET_ById.sh
コマンド:
./NavigationMenu_GET_ById.sh 1234
コード:
curl \
"http://localhost:8080/o/headless-delivery/v1.0/navigation-menus/${1}" \
--user "test@liferay.com:learn"
NavigationMenu_GET_ById.java
コマンド:
java -classpath .:* -DnavigationMenuId=1234 NavigationMenu_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に置き換えてください。
NavigationMenu_PUT_ById.sh
コマンド:
./NavigationMenu_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"
NavigationMenu_PUT_ById.java
コマンド:
java -classpath .:* -DnavigationMenuId=1234 NavigationMenu_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に置き換えてください。
NavigationMenu_DELETE_ById.sh
コマンド:
./NavigationMenu_DELETE_ById.sh 1234
コード:
curl \
"http://localhost:8080/o/headless-delivery/v1.0/navigation-menus/${1}" \
--request "DELETE" \
--user "test@liferay.com:learn"
NavigationMenu_DELETE_ById.java
コマンド
java -classpath .:* -DnavigationMenuId=1234 NavigationMenu_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エクスプローラーには、NavigationMenu
のすべてのサービスとスキーマが一覧表示され、各サービスを試すためのインターフェイスがあります。