掲示板APIの基本
Liferay の Headless Delivery アプリケーションは、 メッセージ ボード アプリケーションに REST サービスを提供します。 これらのサービスでは、掲示板カテゴリやスレッド、メッセージの追加、情報の一覧表示、内容の修正や完全な削除が可能です。 cURL コマンドや Java クラスなどのメソッドを使用してこれらのサービスにアクセスします。
メッセージボードのカテゴリは、Liferay バックエンドでは セクション という名前が付けられています。 これらのセクションでは、スレッドを整理するためのトピックを定義します。
メッセージボードリソースの準備
チュートリアルを進める前に、クリーンな 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に変更します。
開始したら、サイトIDを取得します。 サイト ID を見つけるには、 サイト メニュー (
) を開き、 構成 → サイト設定 → サイト構成に移動します。

チュートリアルコード
以下はヘッドレス API をデモンストレーションするサンプル コードです。 本コードには、サンプルのcURLとJavaファイルの両方が含まれています。
次のコマンドを実行して、 サンプルコードをダウンロードして解凍します。
curl https://resources.learn.liferay.com/examples/liferay-y3a6.zip -O
unzip liferay-y3a6.zip
cURL スクリプトはすぐに使用できる状態で提供されますが、実行する前に Java ソース ファイルを手動でコンパイルする必要があります。 これを行うには、プロジェクトのjavaフォルダに移動し、javacコマンドを実行します。
cd liferay-y3a6/java
javac -classpath .:* *.java
プロジェクトには、依存関係としてcom.liferay.headless.delivery.client.jarファイルが含まれていることに注意してください。 すべてのRESTアプリケーションのクライアントJAR依存関係情報は、/o/apiでインストール先のAPIエクスプローラーで確認できます。
提供されるコードには、 MessageBoardSection、 MessageBoardThread 、 MessageBoardMessage サービス用のAPIが含まれています。 含まれているすべてのサンプル API のリストについては、 チュートリアル コード リファレンス を参照してください。
提供されるコードは、デモのために基本認証を使用しています。 本番環境では、 OAuth2を使用してユーザーを認証する必要があります。
メッセージボードAPIの呼び出し
この演習では、cURL コマンドまたは Java クラスを使用して、 MessageBoardSection, MessageBoardThread and MessageBoardMessage の API を呼び出すことができます。 次の出力例はcURLコマンドに対応しており、提供されているJavaクラスの出力とは少し異なります。
-
liferay-y3a6プロジェクトのcurlまたはjavaフォルダに移動します。cURLの場合:
cd liferay-y3a6/curlJavaの場合:
cd liferay-y3a6/java -
サイト ID をパラメータとして使用して、
MessageBoardSections_POST_ToSiteを実行します。 これにより、指定したサイトに新しい掲示板セクションが作成されます。cURLの場合:
./MessageBoardSections_POST_ToSite.sh {site-id}Javaの場合:
java -classpath .:* -DsiteId={site-id} MessageBoardSections_POST_ToSite端末には、新しく作成されたセクションの完全なスキーマが表示されます。 提供されるAPI呼び出しは、新しいセクションの
descriptionとnameフィールドのみを定義します。 -
セクションのIDをコピーして、以下のGET、PATCH、PUT、DELETEメソッドで使用します。
{ ... "description" : "Foo", "id" : 43925, ... "name" : "Able Section", ... } -
パラメータにサイトIDを使用して、
MessageBoardSections_GET_FromSiteを実行します。 これにより、指定したサイト内のすべてのセクションのリストが返されます。cURLの場合:
./MessageBoardSections_GET_FromSite.sh {site-id}Javaの場合:
java -classpath .:* -DsiteId={site-id} MessageBoardSections_GET_FromSite -
メッセージ ボード セクションの ID をパラメータとして使用して、
MessageBoardSections_PATCH_ByIdを実行します。 これにより、指定されたエントリーの詳細がAPI呼び出しで提供された詳細に更新されます。cURLの場合:
./MessageBoardSections_PATCH_ById.sh {message-board-section-id}Javaの場合:
java -classpath .:* -DmessageBoardSectionId={message-board-section-id} MessageBoardSections_PATCH_ByIdこれにより、
descriptionフィールドがBarに更新されます。 -
パラメータに同じセクション ID を使用して、
MessageBoardSections_PUT_ByIdを実行します。 これにより、指定されたエントリーの詳細がAPI呼び出しで提供された詳細に置き換えられます。cURLの場合:
./MessageBoardSections_PUT_ById.sh {message-board-section-id}Javaの場合:
java -classpath .:* -DmessageBoardSectionId={message-board-section-id} MessageBoardSections_PUT_ByIdこれにより、
nameフィールドがBaker Sectionに、descriptionフィールドがGooに更新されます。 -
パラメータにサイト ID を使用して、
MessageBoardThreads_POST_ToSiteを実行します。 これにより、サイトの新しい掲示板スレッドが作成されます。cURLの場合:
./MessageBoardThreads_POST_ToSite.sh {site-id}Javaの場合:
java -classpath .:* -DsiteId={site-id} MessageBoardThreads_POST_ToSite{ ... "articleBody" : "Foo", ... "headline" : "Able Thread", "id" : 43942, ... "messageBoardRootMessageId" : 43941, }すべてのスレッドは、スレッド内のすべての直接返信の親メッセージとして機能するルートメッセージ(つまり、
messageBoardRootMessageId)で作成されます。 -
上記のセクション ID をパラメータとして使用して、
MessageBoardThreads_POST_ToSectionを実行します。 これにより、指定されたセクションの新しい掲示板スレッドが作成されます。cURLの場合:
./MessageBoardThreads_POST_ToSection.sh {message-board-section-id}Javaの場合:
java -classpath .:* -DmessageBoardSectionId={message-board-section-id} MessageBoardThreads_POST_ToSection -
このスレッドのIDをコピーして、以下のGET、PATCH、PUTメソッドで使用します。
{ ... "articleBody" : "Foo", ... "headline" : "Baker Thread", "id" : 43934, ... "messageBoardRootMessageId" : 43933, "messageBoardSectionId" : 43925, ... } -
スレッドの ID をパラメータとして使用して、
MessageBoardThreads_PATCH_ByIdを実行します。 これにより、指定されたスレッドの詳細がAPI呼び出しで提供された詳細に更新されます。cURLの場合:
./MessageBoardThreads_PATCH_ById.sh {message-board-thread-id}Javaの場合:
java -classpath .:* -DmessageBoardThreadId={message-board-thread-id} MessageBoardThreads_PATCH_ByIdこれにより、
articleBodyフィールドがBarに更新されます。 -
パラメータに同じスレッド ID を使用して、
MessageBoardThreads_PUT_ByIdを実行します。 これにより、指定されたスレッドの詳細がAPI呼び出しで提供された詳細に置き換えられます。cURLの場合:
./MessageBoardThreads_PUT_ById.sh {message-board-thread-id}Javaの場合:
java -classpath .:* -DmessageBoardThreadId={message-board-thread-id} MessageBoardThreads_PUT_ByIdこれにより、
headlineフィールドがCharlie Threadに、articleBodyフィールドがGooに更新されます。 -
パラメーターにサイトIDを使用して、
MessageBoardThreads_GET_FromSiteを実行します。 これにより、セクションを持たないすべてのサイトスレッドのリストが返されます。cURLの場合:
./MessageBoardThreads_GET_FromSite.sh {site-id}Javaの場合:
java -classpath .:* -DsiteId={site-id} MessageBoardThreads_GET_FromSite -
パラメーターにセクションIDを使用して、
MessageBoardThreads_GET_FromSectionを実行します。 これにより、指定したセクション内のすべてのスレッドのリストが返されます。cURLの場合:
./MessageBoardThreads_GET_FromSection.sh {message-board-section-id}Javaの場合:
java -classpath .:* -DmessageBoardSectionId={message-board-section-id} MessageBoardThreads_GET_FromSection -
上記のいずれかのスレッド ID をパラメータとして使用して、
MessageBoardMessages_POST_ToThreadを実行します。 これにより、指定されたスレッドの新しい掲示板のメッセージが作成されます。cURLの場合:
./MessageBoardMessages_POST_ToThread.sh {message-board-thread-id}Javaの場合:
java -classpath .:* -DmessageBoardThreadId={message-board-thread-id} MessageBoardMessages_POST_ToThread -
メッセージのIDをコピーして、以下のPUT、PATCH、POSTコマンドで使用します。
{ ... "articleBody" : "Foo", ... "headline" : "Able Message", "id" : 43946, ... "messageBoardSectionId" : 43925, "messageBoardThreadId" : 43934, "parentMessageBoardMessageId" : 43933, ... }新しいメッセージは、スレッドのルートメッセージ(
messageBoardRootMessageId)の子として作成されます。 -
パラメータにメッセージのIDを使用して、
MessageBoardMessages_PATCH_ByIdを実行します。 これにより、指定されたメッセージの詳細がAPI呼び出しで提供された詳細に更新されます。cURLの場合:
./MessageBoardMessages_PATCH_ById.sh {message-board-message-id}Javaの場合:
java -classpath .:* -DmessageBoardMessageId={message-board-message-id} MessageBoardMessages_PATCH_ByIdこれにより、
articleBodyフィールドがBarに更新されます。 -
パラメータに同じメッセージ ID を使用して、
MessageBoardMessages_PUT_ByIdを実行します。 これにより、指定されたメッセージの詳細がAPI呼び出しで提供された詳細に置き換えられます。cURLの場合:
./MessageBoardMessages_PUT_ById.sh {message-board-message-id}Javaの場合:
java -classpath .:* -DmessageBoardMessageId={message-board-message-id} MessageBoardMessages_PUT_ByIdこれにより、
headlineフィールドがBaker Messageに、articleBodyフィールドがGooに更新されます。 -
前述のメッセージ ID をパラメータとして使用して、
MessageBoardMessages_POST_ToParentを実行します。 これにより、指定したメッセージの子メッセージが作成されます。cURLの場合:
./MessageBoardMessages_POST_ToParent.sh {parent-message-board-message-id}Javaの場合:
java -classpath .:* -DparentMessageBoardMessageId={parent-message-board-message-id} MessageBoardMessages_POST_ToParent{ ... "articleBody" : "Foo", ... "headline" : "Charlie Message", "id" : 43949, ... "messageBoardSectionId" : 43925, "messageBoardThreadId" : 43934, ... "parentMessageBoardMessageId" : 43946, ... } -
パラメータにスレッドIDを使用して、
MessageBoardMessages_GET_FromThreadを実行します。 これにより、スレッドのルートメッセージ(すなわち、messageBoardRootMessage)に対する子メッセージのリストが返されます。cURLの場合:
./MessageBoardMessages_GET_FromThread.sh {message-board-thread-id}Javaの場合:
java -classpath .:* -DmessageBoardThreadId={message-board-thread-id} MessageBoardMessages_GET_FromThread出力には、スレッドで作成した最初のメッセージのデータが含まれ、そのメッセージ自体に1つの子メッセージが含まれている必要があります。 これは、メッセージの
numberOfMessageBoardMessagesフィールドで示されます。 -
パラメーターに直前のメッセージのIDを使用して、
MessageBoardMessages_GET_FromParentを実行します。 これにより、指定したメッセージの子メッセージのすべてのリストが返されます。cURLの場合:
./MessageBoardMessages_GET_FromParent.sh {parent-message-board-message-id}Javaの場合:
java -classpath .:* -DparentMessageBoardMessageId={parent-message-board-message-id} MessageBoardMessages_GET_FromParent出力には、最後に作成した子メッセージのデータも含まれるはずです。
-
パラメータに同じセクション ID を使用して、
MessageBoardSections_DELETE_ByIdを実行します。 これにより、指定されたセクションが、そのスレッドやメッセージとともに削除されます。cURLの場合:
./MessageBoardSections_DELETE_ById.sh {message-board-section-id}Javaの場合:
java -classpath .:* -DmessageBoardSectionId={message-board-section-id} MessageBoardSections_DELETE_ById -
パラメータに同じセクション ID を使用して、
MessageBoardSections_GET_ByIdを実行します。 これにより、指定されたセクションが存在する場合はその詳細が返されます。cURLの場合:
./MessageBoardSections_GET_ById.sh {message-board-section-id}Javaの場合:
java -classpath .:* -DmessageBoardSectionId={message-board-section-id} MessageBoardSections_GET_ById前のステップでセクションを削除したため、次のメッセージが返されます。
{ "status" : "NOT_FOUND", "title" : "No MessageBoardSection exists with the primary key 43925" }
コード参照
提供されるサンプルコードには、以下の MessageBoardSection、 MessageBoardThread 、 MessageBoardMessage の API の cURL スクリプトと Java クラスが含まれています。
MessageBoardSectionのサンプルAPI
サンプルコードには、次のAPIを呼び出すcURLスクリプトとJavaクラスが含まれています。
| サービス | HTTP メソッド | HTTPエンドポイント | 説明 |
|---|---|---|---|
| MessageBoardSection | POST | /v1.0/sites/[siteId]/message-board-sections | API呼び出しで提供された詳細を使用して、新規カテゴリーを作成します |
| MessageBoardSection | GET | /v1.0/sites/[siteId]/message-board-sections | 指定されたサイト内のすべてのカテゴリーの完全なリストを返します。結果に対して、ページ分割、絞り込み、検索、およびソートをすることができます |
| MessageBoardSection | PATCH | /v1.0/message-board-sections/[messageBoardSectionId] | カテゴリのAPI呼び出しで指定されたフィールドのみを更新します |
| MessageBoardSection | PUT | /v1.0/message-board-sections/[messageBoardSectionId] | 指定されたカテゴリのすべてのフィールドを、API呼び出しで提供されたフィールドに置き換えます。 |
| MessageBoardSection | DELETE | /v1.0/message-board-sections/[messageBoardSectionId] | 指定されたカテゴリーを削除し、操作が成功した場合は204を返します |
MessageBoardThreadのサンプルAPI
| サービス | HTTP メソッド | HTTPエンドポイント | 説明 |
|---|---|---|---|
| MessageBoardThread | POST | /v1.0/sites/[siteId]/message-board-threads | API呼び出しで提供された詳細を使用して、新規スレッドを作成します |
| MessageBoardThread | POST | /v1.0/message-board-sections/[messageBoardSectionId]/message-board-threads | API呼び出しで提供された詳細を使用して、指定されたカテゴリ内に新規スレッドを作成します。 |
| MessageBoardThread | GET | /v1.0/sites/[siteId]/message-board-threads | カテゴリに属さないすべてのサイトスレッドの完全なリストを返します。結果はページ分割、絞り込み、検索、ソートが可能です。 |
| MessageBoardThread | GET | /v1.0/message-board-sections/[messageBoardSectionId]/message-board-threads | 指定されたカテゴリ内のすべてのスレッドの完全なリストを返します。結果に対して、ページ分割、絞り込み、検索、およびソートをすることができます |
| MessageBoardThread | PATCH | /v1.0/message-board-threads/[messageBoardThreadId] | スレッドのAPI呼び出しで指定されたフィールドのみを更新します |
| MessageBoardThread | PUT | /v1.0/message-board-threads/[messageBoardThreadId] | 指定されたスレッドのすべてのフィールドを、API呼び出しで提供されたフィールドに置き換えます |
| MessageBoardThread | DELETE | /v1.0/message-board-threads/[messageBoardThreadId] | 指定されたスレッドを削除し、操作が成功した場合は204を返します |
MessageBoardMessageのサンプルAPI
| サービス | HTTP メソッド | HTTPエンドポイント | 説明 |
|---|---|---|---|
| MessageBoardMessage | POST | /v1.0/message-board-threads/[messageBoardThreadId]/message-board-messages | API呼び出しで提供された詳細を使用して、指定されたスレッドに新規メッセージを作成します。 |
| MessageBoardMessage | GET | /v1.0/message-board-threads/[messageBoardThreadId]/message-board-messages | 指定されたスレッド内のすべてのメッセージの完全なリストを返します。結果に対して、ページ分割、絞り込み、検索、およびソートをすることができます |
| MessageBoardMessage | PATCH | /v1.0/message-board-messages/[messageBoardMessageId] | メッセージのAPI呼び出しで指定されたフィールドのみを更新します |
| MessageBoardMessage | PUT | /v1.0/message-board-messages/[messageBoardMessageId] | 指定されたメッセージのすべてのフィールドを、APIコールで提供されたフィールドに置き換えます |
| MessageBoardMessage | DELETE | /v1.0/message-board-messages/[messageBoardMessageId] | 指定されたメッセージを削除し、操作が成功した場合は204を返します |