Wiki APIの基本
Wiki は、Liferay DXP 2024.Q4/Portal GA129 時点で 廃止 されました。 データの継続性を確保するには、 Liferay オブジェクト や Web コンテンツなどの代替コンテンツ管理ソリューションへの移行を検討してください。
Liferay の Headless Delivery アプリケーションは、 Wiki アプリケーションに REST サービスを提供します。 これらのサービスを使用すると、Wikiノードとページを追加したり、それらの情報を一覧表示したり、コンテンツを変更したり、完全に削除したりできます。 ここでは、cURLコマンドとJavaクラスを使用してこれらのサービスを呼び出します。
チュートリアルリソースの準備
チュートリアルに進む前に、まずクリーンなLiferay Dockerコンテナをセットアップし、提供されたチュートリアルコードを使用できるように準備します。
Liferay Dockerコンテナ
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132
http://localhost:8080でLiferayにサインインします。 メールアドレス test@liferay.com とパスワード testを使用してください。 プロンプトが表示されたら、パスワードを learnに変更します。
開始したら、Site IDを取得します。 サイト ID を見つけるには、 サイト メニュー (
) を開き、 構成 → サイト設定 → サイト構成に移動します。

チュートリアルコード
このチュートリアルでは、Headless APIを示すサンプルコードを提供します。 このコードには、チュートリアル全体で使用するためのサンプルのcURLファイルとJavaファイルの両方が含まれています。
次のコマンドを実行して、 サンプルコードをダウンロードして解凍します。
curl https://resources.learn.liferay.com/examples/liferay-q8u2.zip -O
unzip liferay-q8u2.zip
cURLスクリプトを使用する準備ができたら、実行する前にJavaソースファイルを手動でコンパイルする必要があります。 これを行うには、プロジェクトのjavaフォルダに移動し、javacコマンドを実行します。
cd liferay-q8u2/java
javac -classpath .:* *.java
プロジェクトには、依存関係としてcom.liferay.headless.delivery.client.jarファイルが含まれていることに注意してください。 すべてのRESTアプリケーションのクライアントJAR依存関係情報は、/o/apiでインストール先のAPIエクスプローラーで確認できます。
提供されるコードには、 WikiNode と WikiPage のサービスのためのAPIが含まれています。 含まれているすべてのサンプル API のリストについては、 チュートリアル コード リファレンス を参照してください。
提供されるコードは、デモのために基本認証を使用しています。 本番環境では、 OAuth2を使用してユーザーを認証する必要があります。
サンプルWikiNodeのAPIを呼び出す
この演習では、cURLコマンドまたはJavaクラスのいずれかを使用して、 WikiNode のAPIを呼び出すことができます。 次の出力例はcURLコマンドに対応しており、提供されているJavaクラスの出力とは少し異なります。
-
liferay-q8u2プロジェクトのcurlまたはjavaフォルダに移動します。cURLの場合:
cd liferay-q8u2/curlJavaの場合:
cd liferay-q8u2/java -
サイトIDをパラメータとして使用して、
WikiNodes_POST_ToSiteを実行します。 これにより、指定したサイトに新しいWikiノードが作成されます。cURLの場合:
./WikiNodes_POST_ToSite.sh {site-id}Javaの場合:
java -classpath .:* -DsiteId={site-id} WikiNodes_POST_ToSiteターミナルには、新しく作成されたWikiノードの完全なスキーマが表示されます。 提供されるAPI呼び出しは、新規ノードの
descriptionとnameフィールドのみを定義します。 -
ノードのIDをコピーして、以下のGET、PUT、DELETEメソッドで使用します。
{ ... "description" : "Foo", ... "id" : 38405, "name" : "Able Node", ... } -
パラメータにサイトIDを使用して、
WikiNodes_GET_FromSiteを実行します。 これにより、指定したサイト内のすべてのWikiノードのリストが返されます。cURLの場合:
./WikiNodes_GET_FromSite.sh {site-id}Javaの場合:
java -classpath .:* -DsiteId={site-id} WikiNodes_GET_FromSite注すべての DXP/Portal インスタンスには、
Mainと呼ばれるデフォルトの Wiki ノードが付属しています。 このノードは、作成したノードとともに上記の出力に表示されます。 -
パラメータにWikiノードIDを使用して、
WikiNodes_PUT_ByIdを実行します。 これにより、指定されたWikiノードの詳細がAPI呼び出しで提供された詳細に置き換えられます。cURLの場合:
./WikiNodes_PUT_ById.sh {wiki-node-id}Javaの場合:
java -classpath .:* -DwikiNodeId={wiki-node-id} WikiNodes_PUT_ById{ ... "description" : "Bar", ... "id" : 38405, "name" : "Baker Node", ... } -
パラメータに同じWikiノードIDを使用して、
WikiNodes_DELETE_ByIdを実行します。 これにより、指定したノードが削除されます。cURLの場合:
./WikiNodes_DELETE_ById.sh {wiki-node-id}Javaの場合:
java -classpath .:* -DwikiNodeId={wiki-node-id} WikiNodes_DELETE_ById -
パラメータに同じWikiノードIDを使用して、
WikiNodes_GET_ByIdを実行します。 これにより、指定されたノードが存在する場合はその詳細が返されます。cURLの場合:
./WikiNodes_GET_ById.sh {wiki-node-id}Javaの場合:
java -classpath .:* -DwikiNodeId={wiki-node-id} WikiNodes_GET_ById前の手順でノードを削除したため、次のメッセージが返されます。
{ "status" : "NOT_FOUND", "title" : "No WikiNode exists with the primary key 38405" }
サンプルWikiPageのAPIを呼び出す
cURLコマンドまたはJavaクラスのいずれかを使用して、WikiPageのAPIを呼び出すことができます。 次の出力例はcURLコマンドに対応しており、提供されているJavaクラスの出力とは少し異なります。
-
liferay-q8u2プロジェクトのcurlまたはjavaフォルダに移動します。cURLの場合:
cd liferay-q8u2/curlJavaの場合:
cd liferay-q8u2/java -
WikiNodes_POST_ToSiteを実行して、Wiki ページのノードを作成します。cURLの場合:
./WikiNodes_POST_ToSite.sh {site-id}Javaの場合:
java -classpath .:* -DsiteId={site-id} WikiNodes_POST_ToSite注WikiページはWikiノードに保存されるため、Wikiページを作成する前に少なくとも1つのノードが存在する必要があります。
-
WikiPages_POST_ToNode呼び出しで使用するために、出力からノードの ID をコピーします。{ ... "description" : "Foo", ... "id" : 38504, "name" : "Able Node", ... } -
上記のノードIDをパラメータとして使用して、
WikiPages_POST_ToNodeを実行します。 これにより、指定したノードの新しいWikiページが作成されます。cURLの場合:
./WikiPages_POST_ToNode.sh {wiki-node-id}Javaの場合:
java -classpath .:* -DwikiNodeId={wiki-node-id} WikiPages_POST_ToNode -
WikiPages_POST_ToParent呼び出しで使用するためにページの ID をコピーします。{ ... "content" : "Foo", ... "description" : "Able Page", "encodingFormat" : "text/x-wiki", ... "headline" : "Able Page", "id" : 38506, ... } -
上記のWikiページIDをパラメータとして使用して、
WikiPages_POST_ToParentを実行します。 これにより、指定したWikiページの子ページが作成されます。cURLの場合:
./WikiPages_POST_ToNode.sh {wiki-page-id}Javaの場合:
java -classpath .:* -DparentWikiPageId={wiki-page-id} WikiPages_POST_ToParent{ ... "content" : "Foo", ... "description" : "Charlie Page", "encodingFormat" : "text/x-wiki", ... "headline" : "Charlie Page", "id" : 38510, ... } -
パラメータにWikiノードIDを使用して、
WikiPages_GET_FromNodeを実行します。 これにより、指定したノードに追加されたすべてのWikiページのリストが返されます。これには、新しく作成された両方のWikiページが含まれます。cURLの場合:
./WikiPages_GET_FromNode.sh {wiki-node-id}Javaの場合:
java -classpath .:* -DwikiNodeId={wiki-node-id} WikiPages_GET_FromNode -
パラメータにWiki親ページIDを使用して、
WikiPages_GET_FromParentを実行します。 これにより、指定したWikiページの既存の子ページが返されます。cURLの場合:
./WikiPages_GET_FromParent.sh {wiki-page-id}Javaの場合:
java -classpath .:* -DparentWikiPageId={wiki-page-id} WikiPages_GET_FromParent -
上記のいずれかのWikiページIDをパラメータとして使用して、
WikiPages_PUT_ByIdを実行します。 これにより、元のページのコンテンツがAPI呼び出しで定義されたコンテンツに置き換えられます。cURLの場合:
./WikiPages_PUT_ById.sh {wiki-page-id}Javaの場合:
java -classpath .:* -DwikiPageId={wiki-page-id} WikiPages_PUT_ById{ "content" : "Bar", ... "encodingFormat" : "text/x-wiki", ... "headline": "Baker Page", "id" : 38515, ... } -
パラメータに目的のWikiページIDを指定して、
WikiPages_DELETE_ByIdを実行します。 これにより、指定したWikiページが削除されます。cURLの場合:
./WikiPages_DELETE_ById.sh {wiki-page-id}Javaの場合:
java -classpath .:* -DwikiPageId={wiki-page-id} WikiPages_DELETE_ById -
削除されたWikiページのIDをパラメータとして使用して、
WikiPages_GET_ByIdを実行します。 これにより、指定されたページが存在する場合はその詳細が返されます。cURLの場合:
./WikiPages_GET_ById.sh {wiki-page-id}Javaの場合:
java -classpath .:* -DwikiPageId={wiki-page-id} WikiPages_GET_ById前の手順でページが削除されたため、次のメッセージが表示されます。
{ "status" : "NOT_FOUND", "title" : "No WikiNode exists with the primary key 38515" }
チュートリアルコードのリファレンス
提供されるサンプルコードには、以下の WikiNode および WikiPage の API のための cURL スクリプトと Java クラスが含まれています。
WikiNodeのサンプルAPI
| サービス | HTTP メソッド | HTTPエンドポイント | 説明 |
|---|---|---|---|
| WikiNode | POST | /v1.0/sites/[siteId]/wiki-nodes | API呼び出しで提供された詳細を使用して、指定されたサイトに新規Wikiノードを作成します |
| WikiNode | GET | /v1.0/sites/[siteId]/wiki-nodes | 指定されたサイト内のすべてのWikiノードの完全なリストを返します。結果に対して、ページ分割、絞り込み、検索、およびソートをすることができます |
| WikiNode | GET | /v1.0/wiki-nodes/[wikiNodeId] | 指定されたノードエンティティの詳細を返します |
| WikiNode | PUT | /v1.0/wiki-nodes/[wikiNodeId] | 指定されたノードの詳細をAPI呼び出しで提供されたものに置き換えます |
| WikiNode | DELETE | /v1.0/wiki-nodes/[wikiNodeId] | 指定されたノードを削除し、操作が成功した場合は204を返します |
WikiPageのサンプルAPI
| サービス | HTTP メソッド | HTTPエンドポイント | 説明 |
|---|---|---|---|
| WikiPage | POST | /v1.0/wiki-nodes/[wikiNodeId]/wiki-pages | API呼び出しで提供された詳細を使用して、指定されたノードに新しいWikiページを作成します |
| WikiPage | POST | /v1.0/wiki-pages/[parentWikiPageId]/wiki-pages | API呼び出しで提供された詳細を使用して、指定されたWikiページの新しいWiki子ページを作成します。 |
| WikiPage | GET | /v1.0/wiki-nodes/[wikiNodeId]/wiki-pages | 指定されたWikiノードに追加されたすべてのWikiページの完全なリストを返します。結果に対して、ページ分割、絞り込み、検索、およびソートをすることができます |
| WikiPage | GET | /v1.0/wiki-pages/[parentWikiPageId]/wiki-pages | 指定されたWikiページに追加されたすべてのWiki子ページの完全なリストを返します。結果に対して、ページ分割、絞り込み、検索、およびソートすることができます |
| WikiPage | GET | /v1.0/wiki-pages/[wikiPageId] | 指定されたWikiページエンティティの詳細を返します |
| WikiPage | PUT | /v1.0/wiki-pages/[wikiPageId] | 指定されたページの詳細をAPI呼び出しで提供されたものに置き換えます |
| WikiPage | DELETE | /v1.0/wiki-pages/[wikiPageId] | 指定されたページを削除し、操作が成功した場合は204を返します |
Wiki ページで POST および PUT メソッドを使用する場合は、 見出し と エンコード形式 フィールドの両方を定義する必要があります。 見出し フィールドはページのメインタイトルを設定し、 エンコード形式 フィールドはページのメディア形式 (HTML、BBCode など) を決定します。
サンプルのcURLスクリプトの検証
以下は、チュートリアルのcURLコマンドの代表的な例です。
curl \
"http://localhost:8080/o/headless-delivery/v1.0/sites/${1}/wiki-nodes" \
--data-raw '
{
"description": "Foo",
"name": "Able Node"
}' \
--header "Content-Type: application/json" \
--request "POST" \
--user "test@liferay.com:learn"
WikiPages_POST_ToNode.sh
curl \
"http://localhost:8080/o/headless-delivery/v1.0/wiki-nodes/${1}/wiki-pages" \
--data-raw '
{
"content": "Foo",
"encodingFormat": "text/x-wiki",
"headline": "Able Page"
}' \
--header "Content-Type: application/json" \
--request "POST" \
--user "test@liferay.com:learn"
WikiPages_GET_FromNode.sh
curl \
"http://localhost:8080/o/headless-delivery/v1.0/wiki-nodes/${1}/wiki-pages" \
--user "test@liferay.com:learn"
サンプルのJavaクラスの検証
以下は、チュートリアルのJavaコマンドの代表的な例です。
WikiNodes_POST_ToSite.java
public class WikiNodes_POST_ToSite {
/**
* java -classpath .:* -DsiteId=1234 WikiNode_POST_ToSite
*/
public static void main(String[] args) throws Exception {
WikiNodeResource.Builder builder = WikiNodeResource.builder();
WikiNodeResource wikiNodeResource = builder.authentication(
"test@liferay.com", "learn"
).build();
WikiNode wikiNode = wikiNodeResource.postSiteWikiNode(
Long.valueOf(System.getProperty("siteId")),
new WikiNode() {
{
description = "Foo";
name = "Dog Node";
}
});
System.out.println(wikiNode);
}
}
WikiPages_POST_ToNode.java
public class WikiPages_POST_ToNode {
/**
* java -classpath .:* -DwikiNodeId=1234 WikiPage_POST_ToNode
*/
public static void main(String[] args) throws Exception {
WikiPageResource.Builder builder = WikiPageResource.builder();
WikiPageResource wikiPageResource = builder.authentication(
"test@liferay.com", "learn"
).build();
WikiPage wikiPage = wikiPageResource.postWikiNodeWikiPage(
Long.valueOf(System.getProperty("wikiNodeId")),
new WikiPage() {
{
content = "Foo";
encodingFormat = "text/x-wiki";
headline = "Dog Page";
}
});
System.out.println(wikiPage);
}
}
WikiPages_GET_FromNode.java
public class WikiPages_GET_FromNode {
/**
* java -classpath .:* -DwikiNodeId=1234 WikiPages_GET_FromNode
*/
public static void main(String[] args) throws Exception {
WikiPageResource.Builder builder = WikiPageResource.builder();
WikiPageResource wikiPageResource = builder.authentication(
"test@liferay.com", "learn"
).build();
Page<WikiPage> page = wikiPageResource.getWikiNodeWikiPagesPage(
Long.valueOf(System.getProperty("wikiNodeId")), null, null, null,
Pagination.of(1, 2), null);
System.out.println(page);
}
}