Wiki APIの基本
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.55-ga55。
http://localhost:8080でLiferayへのサインインします。 メールアドレス[email protected]_とパスワード_test_を使用してください。 プロンプトが表示されたら、パスワードを _learn_に変更します。
開始したら、Site IDを取得します。 サイトIDを見つけるには、 サイトメニュー()を開き、 [Configuration] → [Site Settings] → [Site Configuration] に移動します。
チュートリアルコード
本チュートリアルでは、サンプルコードを提供し、Headless APIのデモを行います。 このコードには、チュートリアル全体で使用するためのサンプルのcURLファイルとJavaファイルの両方が含まれています。
次のコマンドを実行して、 サンプルコード をダウンロードし、解凍します。
curl https://resources.learn.liferay.com/dxp/latest/ja/collaboration-and-social/wiki/developer-guide/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の一覧は、 チュートリアル・コード・リファレンス を参照してください。
提供されるコードでは、デモのためにBasic認証を使用しています。 本番環境では、 OAuth2 を使用してユーザーを認証する必要があります。
サンプルWikiNodeのAPIを呼び出す
この演習では、cURLコマンドまたはJavaクラスのいずれかを使用して、 WikiNode
APIを呼び出すことができます。 以下の出力例は、cURLコマンドに対応するもので、提供されたJavaクラスの出力とは若干異なります。
liferay-q8u2
プロジェクトのcurl
またはjava
フォルダに移動します。cURLの場合:
cd liferay-q8u2/curl
Javaの場合:
cd liferay-q8u2/java
WikiNode_POST_ToSite
を、自分のサイトIDをパラメータとして実行する。 これにより、指定したサイトに新しいWikiノードが作成されます。cURLの場合:
./WikiNode_POST_ToSite.sh {site-id}
Javaの場合:
java -classpath .:* -DsiteId={site-id} WikiNode_POST_ToSite
ターミナルには、新しく作成されたWikiノードの完全なスキーマが表示されます。 提供される API コールは、新しいノードの
description
とname
フィールドのみを定義します。以下のGET、PUT、DELETEメソッドで使用するために、ノードのIDをコピーします。
{ ... "description" : "Foo", ... "id" : 38405, "name" : "Able Node", ... }
WikiNodes_GET_FromSite
を、そのパラメータにサイトIDを使用して実行します。 これにより、指定したサイト内のすべてのWikiノードのリストが返されます。cURLの場合:
./WikiNodes_GET_FromSite.sh {site-id}
Javaの場合:
java -classpath .:* -DsiteId={site-id} WikiNodes_GET_FromSite
noteすべてのDXP/ポータルインスタンスには、
Main
と呼ばれるデフォルトのWikiノードが付属しています。 このノードは、作成したノードとともに上記の出力に表示されます。WikiNode_PUT_ById
を,Wiki ノード ID をパラメータに用いて実行します. これにより、指定されたWikiノードの詳細がAPI呼び出しで提供された詳細に置き換えられます。cURLの場合:
./WikiNode_PUT_ById.sh {wiki-node-id}
Javaの場合:
java -classpath .:* -DwikiNodeId={wiki-node-id} WikiNode_PUT_ById
{ ... "description" : "Bar", ... "id" : 38405, "name" : "Baker Node", ... }
WikiNode_DELETE_ById
を、同じ Wiki ノード ID をパラメータに用いて実行します。 これにより、指定したノードが削除されます。cURLの場合:
./WikiNode_DELETE_ById.sh {wiki-node-id}
Javaの場合:
java -classpath .:* -DwikiNodeId={wiki-node-id} WikiNode_DELETE_ById
WikiNode_GET_ById
を、同じ Wiki ノード ID をパラメータとして実行します。 これにより、指定されたノードが存在する場合はその詳細が返されます。cURLの場合:
./WikiNode_GET_ById.sh {wiki-node-id}
Javaの場合:
java -classpath .:* -DwikiNodeId={wiki-node-id} WikiNode_GET_ById
前の手順でノードを削除したため、次のメッセージが返されます。
{ "status" : "NOT_FOUND", "title" : "No WikiNode exists with the primary key 38405" }
サンプルWikiページのAPIを呼び出す
WikiPage
のAPIを呼び出すには、cURLコマンドかJavaクラスのどちらかを使用します。 以下の出力例は、cURLコマンドに対応するもので、提供されたJavaクラスの出力とは若干異なります。
liferay-q8u2
プロジェクトのcurl
またはjava
フォルダに移動します。cURLの場合:
cd liferay-q8u2/curl
Javaの場合:
cd liferay-q8u2/java
WikiNode_POST_ToSite
を実行し、Wikiページ用のノードを作成します。cURLの場合:
./WikiNode_POST_ToSite.sh {site-id}
Javaの場合:
java -classpath .:* -DsiteId={site-id} WikiNode_POST_ToSite
noteWikiページはWikiノードに保存されるため、Wikiページを作成する前に少なくとも1つのノードが存在する必要があります。
WikiPage_POST_ToNode
呼び出しで使用するために、出力からノードのIDをコピーします。{ ... "description" : "Foo", ... "id" : 38504, "name" : "Able Node", ... }
WikiPage_POST_ToNode
を上記のノードIDをパラメータとして実行します. これにより、指定したノードの新しいWikiページが作成されます。cURLの場合:
./WikiPage_POST_ToNode.sh {wiki-node-id}
Javaの場合:
java -classpath .:* -DwikiNodeId={wiki-node-id} WikiPage_POST_ToNode
WikiPage_POST_ToParent
呼び出しで使用するためにページのIDをコピーします。{ ... "content" : "Foo", ... "description" : "Able Page", "encodingFormat" : "text/x-wiki", ... "headline" : "Able Page", "id" : 38506, ... }
WikiPage_POST_ToParent
を、上記のWikiページIDをパラメータとして実行します。 これにより、指定したWikiページの子ページが作成されます。cURLの場合:
./WikiPage_POST_ToNode.sh {wiki-page-id}
Javaの場合:
java -classpath .:* -DparentWikiPageId={wiki-page-id} WikiPage_POST_ToParent
{ ... "content" : "Foo", ... "description" : "Charlie Page", "encodingFormat" : "text/x-wiki", ... "headline" : "Charlie Page", "id" : 38510, ... }
WikiPages_GET_FromNode
を、WikiノードIDをパラメータとして実行します。 これにより、指定したノードに追加されたすべてのWikiページのリストが返されます。これには、新しく作成された両方のWikiページが含まれます。cURLの場合:
./WikiPages_GET_FromNode.sh {wiki-node-id}
Javaの場合:
java -classpath .:* -DwikiNodeId={wiki-node-id} WikiPages_GET_FromNode
WikiPages_GET_FromParent
を、Wiki親ページIDをパラメータに用いて実行します。 これにより、指定したWikiページの既存の子ページが返されます。cURLの場合:
./WikiPages_GET_FromParent.sh {wiki-page-id}
Javaの場合:
java -classpath .:* -DparentWikiPageId={wiki-page-id} WikiPages_GET_FromParent
WikiPage_PUT_ById
を、上記のいずれかのWikiページIDをパラメータに用いて実行します。 これにより、元のページのコンテンツがAPI呼び出しで定義されたコンテンツに置き換えられます。cURLの場合:
./WikiPage_PUT_ById.sh {wiki-page-id}
Javaの場合:
java -classpath .:* -DwikiPageId={wiki-page-id} WikiPage_PUT_ById
{ "content" :"バー", ... "encodingFormat" : "text/x-wiki", ... "headline": "Baker Page", "id" : 38515, ... }
WikiPage_DELETE_ById
を、希望するWikiページIDをパラメータに用いて実行します。 これにより、指定したWikiページが削除されます。cURLの場合:
./WikiPage_DELETE_ById.sh {wiki-page-id}
Javaの場合:
java -classpath .:* -DwikiPageId={wiki-page-id} WikiPage_DELETE_ById
削除された Wiki ページの ID をパラメータとして
WikiPage_GET_ById
を実行する。 これにより、指定されたページが存在する場合はその詳細が返されます。cURLの場合:
./WikiPage_GET_ById.sh {wiki-page-id}
Javaの場合:
java -classpath .:* -DwikiPageId={wiki-page-id} WikiPage_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メソッドを使用する場合は、 headline
フィールドとencodingFormat
フィールドの両方を定義する必要があります。 headline
フィールドはページのメインタイトルを設定し、encodingFormat
フィールドはページのメディアフォーマット(HTML、BBCodeなど)を決定します。
サンプルのcURLスクリプトの検証
以下は、チュートリアルのcURLコマンドの代表的な例です。
curl \
-H 'Content-Type: application/json' \
-X 'POST' "http://localhost:8080/o/headless-delivery/v1.0/sites/${1}/wiki-nodes" \
-d "{\"description\": \"Foo\", \"name\": \"Able Node\"}" \
-u "[email protected]:learn"
WikiPage_POST_ToNode.sh
curl \
-H 'Content-Type: application/json' \
-X 'POST' "http://localhost:8080/o/headless-delivery/v1.0/wiki-nodes/${1}/wiki-pages" \
-d "{\"content\": \"Foo\", \"encodingFormat\": \"text/x-wiki\", \"headline\": \"Able Page\"}" \
-u "[email protected]:learn"
WikiPages_GET_FromNode.sh
curl \
"http://localhost:8080/o/headless-delivery/v1.0/wiki-nodes/${1}/wiki-pages" \
-u "[email protected]:learn"
サンプルのJavaクラスの検証
以下は、チュートリアルのJavaコマンドの代表的な例です。
WikiNode_POST_ToSite.java
public class WikiNode_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(
"[email protected]", "learn"
).build();
WikiNode wikiNode = wikiNodeResource.postSiteWikiNode(
Long.valueOf(System.getProperty("siteId")),
new WikiNode() {
{
description = "Foo";
name = "Dog Node";
}
});
System.out.println(wikiNode);
}
}
WikiPage_POST_ToNode.java
public class WikiPage_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(
"[email protected]", "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(
"[email protected]", "learn"
).build();
Page<WikiPage> page = wikiPageResource.getWikiNodeWikiPagesPage(
Long.valueOf(System.getProperty("wikiNodeId")), null, null, null,
Pagination.of(1, 2), null);
System.out.println(page);
}
}