サイトAPIの基本
LiferayのREST APIは、Liferayサイト向けのサービスを提供します。 APIを使用してサイトを作成および編集できます。
Sites APIは、外部参照コード(ERC)を使用してサイトを参照することで、インスタンス間で一貫した識別を可能にし、コンテンツ管理と移植性を向上させるためのバッチエクスポートおよびインポートをサポートします。
まずは、新しいサイトを追加する例を見てみましょう。
サイトの追加
新しいLiferay DXPインスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/dxp:2025.q1.6-lts
http://localhost:8080 に、メールアドレス test@liferay.com とパスワード test を使用して Liferay にサインインします。 プロンプトが表示されたら、パスワードを learnに変更します。
次に、以下の手順に従います。
-
サイトAPIの基本 をダウンロードして解凍します。
curl https://resources.learn.liferay.com/examples/liferay-w9v7.zip -Ounzip liferay-w9v7.zip -
cURLスクリプトを使用して新しいサイトを追加します。 コマンドラインで、
curlフォルダに移動します。Sites_POST.shスクリプトを実行します。./Sites_POST.shJSONレスポンスには、新しいサイトが追加されたことが示されています。
{ "active" : true, "analyticsConfiguration" : { "googleAnalyticsConfiguration" : { } }, "assetAutoTaggingEnabled" : false, "contentSharingWithChildrenEnabled" : true, "defaultLanguageId" : "en_US", "description" : "", "description_i18n" : { }, "descriptiveName" : "My Site", "descriptiveName_i18n" : { "fi-FI" : "My Site", "ar-SA" : "My Site", "hu-HU" : "My Site", "de-DE" : "My Site", "ca-ES" : "My Site", "en-US" : "My Site", "pt-BR" : "My Site", "es-ES" : "My Site", "zh-Hans-CN" : "My Site", "nl-NL" : "My Site", "sv-SE" : "My Site", "fr-FR" : "My Site", "ja-JP" : "My Site" }, "directoryIndexingEnabled" : false, "externalReferenceCode" : "dff0dc09-4124-177d-4adc-cb4b43e7883a", "friendlyUrlPath" : "/my-site", "id" : 43179, "inheritLocales" : true, "key" : "My Site", "locales" : [ "en-US", "ar-SA", "ca-ES", "zh-CN", "nl-NL", "fi-FI", "fr-FR", "de-DE", "hu-HU", "ja-JP", "pt-BR", "es-ES", "sv-SE" ], "manualMembership" : true, "membershipRestriction" : 0, "membershipType" : "restricted", "mentionsEnabled" : false, "name" : "My Site", "name_i18n" : { "en-US" : "My Site" }, "parentSiteExternalReferenceCode" : "", "ratingsTypes" : { }, "sharingEnabled" : false, "trashEnabled" : false, "trashEntriesMaxAge" : 0 } -
グローバルメニュー (
) を開き、右側のリストに新しいサイトが表示されていることを確認してください。
-
Javaクライアントを使用してRESTサービスを呼び出すこともできます。
javaフォルダに移動し、ソースファイルをコンパイルします。javac -classpath .:* *.java -
Sites_POSTクラスを実行します。java --add-opens java.base/java.net=ALL-UNNAMED -classpath .:* Sites_POSTヒントJava 8 で古いバージョンの Liferay を使用している場合は、
--add-opens引数を削除してください。java -classpath .:* Sites_POST
cURLコマンドの検証
Sites_POST.sh スクリプトは、cURL コマンドを使用して REST サービスを呼び出します。
curl \
"http://localhost:8080/o/headless-admin-site/v1.0/sites" \
--data-raw '
{
"name": "My Site"
}' \
--header "Content-Type: application/json" \
--request "POST" \
--user "test@liferay.com:learn"
ここでは、コマンドの引数を紹介します。
| 引数 | 説明 |
|---|---|
"http://localhost:8080/o/headless-admin-site/v1.0/sites" | RESTサービスのエンドポイント |
--data-raw "{\"name\": \"My Site\"}" | お客様が掲載を希望するデータ |
--header "Content-Type: application/json" | リクエストボディのフォーマットがJSONであることを示します。 |
--request POST | 指定されたエンドポイントで起動するHTTPメソッド |
--user "test@liferay.com:learn" | 基本的な認証情報 |
ここでは、デモのために基本的な認証を使用しています。 本番環境では、 OAuth2 を介してユーザーを認証します。 OAuth2 を使用する React アプリケーションの例については、 OAuth2 を使用してユーザーを認証する を参照してください。
他のcURLコマンドも同様のJSON引数を使用しています。
Javaクラスを調べる
Sites_POST.java クラスは、 SiteResource サービスを呼び出すことでサイトを追加します。
public static void main(String[] args) throws Exception {
SiteResource.Builder builder = SiteResource.builder();
SiteResource siteResource = builder.authentication(
"test@liferay.com", "learn"
).build();
Site site = siteResource.postSite(
new Site() {
{
name = "My Site";
}
});
System.out.println(site);
}
}
このクラスは、わずか数行のコードでRESTサービスを呼び出します。
| 行(省略形) | 説明 |
|---|---|
SiteResource.Builder builder = ... | ビルダー を取得して、 SiteResource サービス インスタンスを生成します。 |
SiteResource siteResource = builder.authentication(...).build(); | 基本認証を指定し、 SiteResource サービス インスタンスを生成します。 |
Site site = siteResource.postSite(...); | siteResource.postSite メソッドを呼び出し、データを post に渡します。 |
プロジェクトには、依存関係としてcom.liferay.headless.admin.site.client.jarファイルが含まれていることに注意してください。 すべてのRESTアプリケーションのクライアントJAR依存関係情報は、/o/apiでインストール先のAPIエクスプローラーで確認できます。
main メソッドのコメントは、クラスを実行する方法を示しています。
他の Java クラスも同じパターンに従いますが、異なる SiteResource メソッドを呼び出します。
サービスの詳細については、 SiteResource を参照してください。
以下は、cURLとJavaを使用して他の サイト RESTサービスを呼び出す例です。
サイトを取得する
cURLまたはJavaを使用してサイトの一覧を表示できます。
Sites_GET.sh
コマンド:
./Sites_GET.sh
コード:
curl \
"http://localhost:8080/o/headless-admin-site/v1.0/sites" \
--header "Accept: application/json" \
--request "GET" \
--user "test@liferay.com:learn"
Sites_GET.java
コマンド:
java --add-opens java.base/java.net=ALL-UNNAMED -classpath .:* Sites_GET
コード:
public static void main(String[] args) throws Exception {
SiteResource.Builder builder = SiteResource.builder();
SiteResource siteResource = builder.authentication(
"test@liferay.com", "learn"
).build();
System.out.println(
siteResource.getSitesPage(null, null, null));
}
サイトの オブジェクトは JSON に現れます。
サイトを取得する
外部参照コード(ERC)を使用して特定のサイトを取得します。
ERCはPOSTレスポンスまたはサイト設定で確認できます。
-
サイトにアクセスしてください。 サイトメニュー (
を開き、 設定を展開し、 サイト設定 に移動します。 -
プラットフォームの下で、 サイト構成 をクリックします。 ERCは 詳細 タブに表示されます。

または、 Sites_GET.[java|sh] を使用してサイトを一覧表示し、その ERC を取得します。
- 以下のコマンドの
1234をサイトの ERC に置き換えてください。
Sites_GET_ByExternalReferenceCode.sh
コマンド:
./Sites_GET_ByExternalReferenceCode.sh 1234
コード:
curl \
"http://localhost:8080/o/headless-admin-site/v1.0/sites/${1}" \
--header "Accept: application/json" \
--request "GET" \
--user "test@liferay.com:learn"
Sites_GET_ByExternalReferenceCode.java
コマンド:
java --add-opens java.base/java.net=ALL-UNNAMED -classpath .:* -DsiteExternalReferenceCode=1234 Sites_GET_ByExternalReferenceCode
コード:
public static void main(String[] args) throws Exception {
SiteResource.Builder builder = SiteResource.builder();
SiteResource siteResource = builder.authentication(
"test@liferay.com", "learn"
).build();
System.out.println(
siteResource.getSite(
System.getProperty("siteExternalReferenceCode")));
}
}
サイト フィールドは JSON に表示されます。
サイトを設置する
既存のサイトを上書きします。 注: 1234 をサイトの ERC に置き換えてください。
サイトのアクティブ状態のみを切り替えるには、専用のactivateまたはdeactivateエンドポイントを使用します。 それらのエンドポイントとこのエンドポイントの両方は、システムに必要なサイトを無効化しようとすると、 405 レスポンスを返します。
Sites_PUT_ByExternalReferenceCode.sh
コマンド:
./Sites_PUT_ByExternalReferenceCode.sh 1234
コード:
curl \
"http://localhost:8080/o/headless-admin-site/v1.0/sites/${1}" \
--data-raw '
{
"name": "My Updated Site"
}' \
--header "Content-Type: application/json" \
--request "PUT" \
--user "test@liferay.com:learn"
Sites_PUT_ByExternalReferenceCode.java
コマンド:
java --add-opens java.base/java.net=ALL-UNNAMED -classpath .:* -DsiteExternalReferenceCode=1234 Sites_PUT_ByExternalReferenceCode
コード:
public static void main(String[] args) throws Exception {
SiteResource.Builder builder = SiteResource.builder();
SiteResource siteResource = builder.authentication(
"test@liferay.com", "learn"
).build();
Site site = siteResource.putSite(
System.getProperty("siteExternalReferenceCode"),
new Site() {
{
name = "My Updated Site";
}
});
System.out.println(site);
}
}
サイトを有効化または無効化する
ヘッドレス管理サイトのREST APIを使用すると、コントロールパネルからサイトにアクセスすることなく、ERCに基づいてサイトを有効化または無効化できます。 これにより、多数のサイトを管理する組織向けに、一括またはスケジュールされた状態変更をスクリプト化できます。 対象サイトで UPDATE の権限が必要です。
親サイトを有効化または無効化しても、子サイトには影響しません。 お子様一人につき、ERC(緊急対応費用)の申請を個別に送信してください。
1234 をサイトの ERC に置き換えてください。
Sites_PUT_Activate.sh
コマンド:
./Sites_PUT_Activate.sh 1234
コード:
Sites_PUT_Activate.java
コマンド:
java --add-opens java.base/java.net=ALL-UNNAMED -classpath .:* -DsiteExternalReferenceCode=1234 Sites_PUT_Activate
コード:
Sites_PUT_Deactivate.sh
コマンド:
./Sites_PUT_Deactivate.sh 1234
コード:
Sites_PUT_Deactivate.java
コマンド:
java --add-opens java.base/java.net=ALL-UNNAMED -classpath .:* -DsiteExternalReferenceCode=1234 Sites_PUT_Deactivate
コード:
リクエストが成功すると、本文のない 204 レスポンスが返されます。 変更を確認するには、 サイト を取得し、 アクティブな フィールドを確認します。
応答コード
| ステータス | 意味 |
|---|---|
204 | リクエストは成功しました。 サイトの アクティブ フィールドは、要求された状態を反映しています。 |
403 | 対象サイトで UPDATE の権限がありません。 |
404 | 指定されたERCを持つサイトは存在しません。 |
405 | 無効化のみ。 対象サイトはシステム必須(グローバルサイト、デフォルトゲストサイト、コントロールパネルサイトなど)であり、無効化することはできません。 レスポンスボディには サイト [サイト名] はシステム必須サイト であるため無効化できません。 |
サイトを削除する
ERCを使用して既存のサイトを削除します。 注: 1234 をサイトの ERC に置き換えてください。
Sites_DELETE_ByExternalReferenceCode.sh
コマンド:
./Sites_DELETE_ByExternalReferenceCode.sh 1234
コード:
curl \
"http://localhost:8080/o/headless-admin-site/v1.0/sites/${1}" \
--request "DELETE" \
--user "test@liferay.com:learn"
Sites_DELETE_ByExternalReferenceCode.java
コマンド:
java --add-opens java.base/java.net=ALL-UNNAMED -classpath .:* -DsiteExternalReferenceCode=1234 Sites_DELETE_ByExternalReferenceCode
コード:
public static void main(String[] args) throws Exception {
SiteResource.Builder builder = SiteResource.builder();
SiteResource siteResource = builder.authentication(
"test@liferay.com", "learn"
).build();
siteResource.deleteSite(
System.getProperty("siteExternalReferenceCode"));
}
}
API Explorer には、すべての サイト サービスとスキーマが一覧表示され、各サービスを試すためのインターフェースがあります。
バッチエンジンによるサイト管理
Sites APIは、Liferayインスタンス間でサイトおよび関連エンティティを移行するためのバッチエクスポートおよびインポートをサポートしています。 関連する 権限を含め、 フィルタ を適用して結果を絞り込み、 作成者データ がインポートおよびエクスポート要求中にどのように処理されるかを設定できます。
バッチ エンジンの使用方法の詳細については、 バッチ エンジン API を使用したデータのエクスポート および バッチ エンジン API を使用したデータのインポート を参照してください。
サイト権限
これらのAPIエンドポイントを使用して、サイトの権限を管理します。 {siteExternalReferenceCode} をサイトの ERC に置き換えてください。
-
権限付きサイトを作成する
エンドポイントに
POSTリクエストを送信して、作成時にカスタム権限を割り当てます。 指定された役割は既に存在している必要があります。 指定されたロールが存在しない場合、APIは404エラーを返します。パーミッション配列を省略すると、サイトはデフォルトのパーミッションで作成されます。パーミッション配列を含めると、Liferay はサイト作成時に指定されたロールとアクションを適用します。例:
curl \ "http://localhost:8080/o/headless-admin-site/v1.0/sites" \ --data-binary ' { "name": "My Site", "permissions": [ { "roleName": "Owner", "actionIds": ["VIEW", "UPDATE"] } ] }' \ --header "Content-Type: application/json" \ --request "POST" \ --user "test@liferay.com:learn" -
サイト権限を取得する
サイトの応答には、権限情報は含まれません。 これらを取得するには、
/v1.0/sites/{siteExternalReferenceCode}/permissionsエンドポイントを使用します。例:
curl \ "http://localhost:8080/o/headless-admin-site/v1.0/sites/{siteExternalReferenceCode}/permissions" \ --user "test@liferay.com:learn" -
サイト権限を更新する
PUTリクエストを使用して、既存のサイトの権限を更新します。{siteExternalReferenceCode}をサイトの ERC に置き換えてください。この操作により、既存のサイト権限がすべて置き換えられます。 更新後も残るのは、リクエストに含まれていた役割とアクションのみです。
ヒントERCというサイトは、サイト取得中に見つけることができる。
例:
curl \ "http://localhost:8080/o/headless-admin-site/v1.0/sites/{siteExternalReferenceCode}/permissions" \ --data-binary ' [ { "actionIds": ["VIEW", "UPDATE", "DELETE", "PERMISSIONS"], "roleName": "Owner" } ]' \ --header "Content-Type: application/json" \ --request "PUT" \ --user "test@liferay.com:learn"
データをフィルタリングする
フィルターを使用すると、取得するサイトを絞り込むことができます。
-
getSitesPageエンドポイントを使用して、フィルタリングされたサイトを取得します。フィルターパラメーターを使用して、必要なサイトのみを取得します。curl \ "http://localhost:8080/o/headless-admin-site/v1.0/sites?filter=dateCreated%20le%202025-07-18T14%3A25%3A00Z&sort=dateCreated%3Adesc" \ --header "Content-Type: application/json" \ --request "GET" \ --user "test@liferay.com:learn"クエリパラメータの仕組みは以下のとおりです。
パラメーター 説明 /o/headless-admin-site/v1.0/sitesヘッドレス管理サイトAPIを使用してサイトを取得するためのエンドポイント。 filter=dateCreated%20le%202025-07-18T14%3A25%3A00ZURLエンコードされています。 検索結果を絞り込み、2025年7月18日14時25分(UTC)以前に作成されたサイトのみを含めるようにします。 sort=dateCreated%3AdescURLエンコードされています。 結果を dateCreatedの降順 (最新順) で並べ替えます。ヒント特定のサイトを名前で取得するには、
search=パラメータを追加します。 例:/o/headless-admin-site/v1.0/sites?filter=dateCreated%20le%202025-07-18T14%3A25%3A00Z&search=Main&sort=dateModified:descこれは、名前に
Mainが含まれるサイトのみを取得します。
クリエイターデータの維持
サイトをインポートする際には、 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.admin.site.dto.v1_0.Site?creatorStrategy=INSERT&importCreatorStrategy=KEEP_CREATOR" \
--data-raw '
[
{
"name": "My Imported Site",
"externalReferenceCode": "my-site-001"
}
]' \
--header "Content-Type: application/json" \
--request "POST" \
--user "test@liferay.com:learn"