ブログAPIの基本
Liferay の REST API は、ブログの投稿や画像を追加、変更、削除するためのサービスを提供します。
Liferay DXP 2024.Q4+/Portal GA129+ Blogs API は、ブログの投稿や画像を参照するために外部参照コード (ERC) を使用するようになりました。これにより、インスタンス間で一貫した識別が可能になり、コンテンツの管理と移植性を向上させるバッチエクスポート/インポートがサポートされます。
まずは、新しいブログ投稿を追加する例を見てみましょう。
ブログ投稿の追加
新しい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に変更します。
次に、以下の手順に従います。
-
Blog API Basicsをダウンロードして解凍します。
curl https://resources.learn.liferay.com/examples/liferay-r3g4.zip -Ounzip liferay-r3g4.zip -
サイトのIDを見つけます。 これは以下のさまざまなサービス呼び出しで使用されます。
-
cURL スクリプトを使用して、サイトに新しいブログ投稿を追加します。 コマンドラインで、
curlフォルダに移動します。 サイト ID をパラメータとしてBlogPostings_POST_ToSites.shスクリプトを実行します。./BlogPostings_POST_ToSites.sh 1234JSON応答では、新しいブログ投稿が追加されたことを示しています。
{ "alternativeHeadline": "", "articleBody": "Foo", "creator": { "additionalName": "", "contentType": "UserAccount", "familyName": "Test", "givenName": "Test", "id": 20125, "name": "Test Test" }, "customFields": [], "dateCreated": "2021-07-21T21:26:55Z", "dateModified": "2021-07-21T21:26:55Z", "datePublished": "2021-07-21T21:26:00Z", "description": "", "encodingFormat": "text/html", "friendlyUrlPath": "able", "headline": "Able", "id": 38511, "keywords": [], "numberOfComments": 0, "relatedContents": [], "siteId": 20121, "taxonomyCategoryBriefs": [] } -
管理メニュー → コンテンツ & データ → ブログに移動して、ブログ アプリケーションに移動します。 新しいブログ投稿が追加されたことを確認してください。

-
RESTサービスは、Javaクラスで呼び出すこともできます。
curlフォルダから、javaフォルダに移動します。 ソースファイルをコンパイルします。javac -classpath .:* *.java -
BlogPostings_POST_ToSitesクラスを実行します。siteIdの値をサイト ID に置き換えます。java -classpath .:* -DsiteId=1234 BlogPostings_POST_ToSites
cURLコマンドの検証
BlogPostings_POST_ToSites.sh スクリプトは、cURL コマンドを使用して REST サービスを呼び出します。
curl \
"http://localhost:8080/o/headless-delivery/v1.0/sites/${1}/blog-postings" \
--data-raw '
{
"articleBody": "Foo",
"headline": "Able"
}' \
--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}/blog-postings" | RESTサービスのエンドポイント |
-d "{\"articleBody\": \"Foo\", \"headline\": \"Able\"}" | お客様が掲載を希望するデータ |
-u "test@liferay.com:learn" | 基本的な認証情報 |
ここでは、デモのために基本的な認証を使用しています。 本番環境では、 OAuth2経由でユーザーを認証する必要があります。 OAuth2 を使用するサンプル React アプリケーションについては、 OAuth2 を使用してユーザーを承認する を参照してください。
他のcURLコマンドも同様のJSON引数を使用しています。
Javaクラスを調べる
BlogPostings_POST_ToSites.java クラスは、ブログ投稿関連サービスを呼び出してブログ投稿を追加します。
public static void main(String[] args) throws Exception {
BlogPostingResource.Builder builder = BlogPostingResource.builder();
BlogPostingResource blogPostingResource = builder.authentication(
"test@liferay.com", "learn"
).build();
System.out.println(
blogPostingResource.postSiteBlogPosting(
Long.valueOf(System.getProperty("siteId")),
new BlogPosting() {
{
articleBody = "Foo";
headline = "Baker";
}
}));
}
このクラスは、わずか3行のコードでRESTサービスを呼び出します。
| 行(省略形) | 説明 |
|---|---|
BlogPostingResource.Builder builder = ... | Builderを取得し、BlogPostingResourceサービスインスタンスを生成します。 |
BlogPostingResource blogPostingResource = builder.authentication(...).build(); | 基本認証を指定し、BlogPostingResourceサービスインスタンスを生成します。 |
BlogPosting blogPosting = blogPostingResource.postSiteBlogPosting(...); | BlogPostingResource.postSiteBlogPostingメソッドを呼び出し、データを投稿に渡します。 |
プロジェクトには、依存関係としてcom.liferay.headless.delivery.client.jarファイルが含まれていることに注意してください。 すべてのRESTアプリケーションのクライアントJAR依存関係情報は、/o/apiでインストール先のAPIエクスプローラーで確認できます。
メイン メソッドのコメントは、クラスの実行を示しています。
他の例のJavaクラスはこれと類似していますが、異なるBlogPostingResourceメソッドを呼び出します。
サービスの詳細については、 BlogPostingResource を参照してください。
以下は、cURLとJavaを使って、他のBlogPosting RESTサービスを呼び出す例です。
サイトからブログ投稿を取得する
次のcURLまたはJavaコマンドを実行すると、サイトのブログ投稿を一覧表示できます。 上記のように、1234をサイトのIDに置き換えてください。
BlogPostings_GET_FromSites.sh
コマンド:
./BlogPostings_GET_FromSites.sh 1234
コード:
curl \
"http://localhost:8080/o/headless-delivery/v1.0/sites/${1}/blog-postings" \
--user "test@liferay.com:learn"
BlogPostings_GET_FromSites.java
コマンド:
java -classpath .:* -DsiteId=1234 BlogPostings_GET_FromSites
コード:
public static void main(String[] args) throws Exception {
BlogPostingResource.Builder builder = BlogPostingResource.builder();
BlogPostingResource blogPostingResource = builder.authentication(
"test@liferay.com", "learn"
).build();
System.out.println(
blogPostingResource.getSiteBlogPostingsPage(
Long.valueOf(System.getProperty("siteId")), null, null, null,
Pagination.of(1, 2), null));
}
GET メソッドは、サイトの BlogPosting オブジェクトを JSON 形式で返します。
ブログ投稿を取得する
次のcURLまたはJavaコマンドを使用して、特定のブログ投稿を取得します。 1234をブログ投稿のIDに置き換えてください。
BlogPostings_GET_FromSites.[java|sh] を使用して BlogPosting ID を取得します。
ブログ投稿_GET_ById.sh
コマンド:
./BlogPostings_GET_ById.sh 1234
コード:
curl \
"http://localhost:8080/o/headless-delivery/v1.0/blog-postings/${1}" \
--user "test@liferay.com:learn"
BlogPostings_GET_ById.java
コマンド:
java -classpath .:* -DblogPostingId=1234 BlogPostings_GET_ById
コード:
public static void main(String[] args) throws Exception {
BlogPostingResource.Builder builder = BlogPostingResource.builder();
BlogPostingResource blogPostingResource = builder.authentication(
"test@liferay.com", "learn"
).build();
System.out.println(
blogPostingResource.getBlogPosting(
Long.valueOf(System.getProperty("blogPostingId"))));
}
GET メソッドは、 BlogPosting フィールドを JSON 形式で返します。
ブログ投稿にパッチを適用する
次のcURLおよびJavaコマンドを使用して、既存のブログ投稿を部分的に編集します。 注: 1234をブログ投稿のIDに置き換えてください。
ブログ投稿_PATCH_ById.sh
コマンド:
./BlogPostings_PATCH_ById.sh 1234
コード:
curl \
"http://localhost:8080/o/headless-delivery/v1.0/blog-postings/${1}" \
--data-raw '
{
"articleBody": "Bar"
}' \
--header "Content-Type: application/json" \
--request "PATCH" \
--user "test@liferay.com:learn"
BlogPostings_PATCH_ById.java
コマンド:
java -classpath .:* -DblogPostingId=1234 BlogPostings_PATCH_ById
コード:
public static void main(String[] args) throws Exception {
BlogPostingResource.Builder builder = BlogPostingResource.builder();
BlogPostingResource blogPostingResource = builder.authentication(
"test@liferay.com", "learn"
).build();
System.out.println(
blogPostingResource.patchBlogPosting(
Long.valueOf(System.getProperty("blogPostingId")),
new BlogPosting() {
{
articleBody = "Bar";
}
}));
}
この例では、記事の本文の内容がFooからBarに変更されています。
ブログ投稿をする
次のcURLおよびJavaコマンドを使用して、既存のブログ投稿を完全に上書きします。 注: 1234をブログ投稿のIDに置き換えてください。
ブログ投稿_PUT_ById.sh
コマンド:
./BlogPostings_PUT_ById.sh 1234
コード:
curl \
"http://localhost:8080/o/headless-delivery/v1.0/blog-postings/${1}" \
--data-raw '
{
"articleBody": "Goo",
"headline": "Able"
}' \
--header "Content-Type: application/json" \
--request "PUT" \
--user "test@liferay.com:learn"
BlogPostings_PUT_ById.java
コマンド:
java -classpath .:* -DblogPostingId=1234 BlogPostings_PUT_ById
コード:
public static void main(String[] args) throws Exception {
BlogPostingResource.Builder builder = BlogPostingResource.builder();
BlogPostingResource blogPostingResource = builder.authentication(
"test@liferay.com", "learn"
).build();
System.out.println(
blogPostingResource.putBlogPosting(
Long.valueOf(System.getProperty("blogPostingId")),
new BlogPosting() {
{
articleBody = "Goo";
headline = "Baker";
}
}));
}
ブログ投稿を削除する
次のcURLおよびJavaコマンドを使用して、既存のブログ投稿を削除します。 注: 1234をブログ投稿のIDに置き換えてください。
ブログ投稿_DELETE_ById.sh
コマンド:
./BlogPostings_DELETE_ById.sh 1234
コード:
curl \
"http://localhost:8080/o/headless-delivery/v1.0/blog-postings/${1}" \
--request "DELETE" \
--user "test@liferay.com:learn"
ブログ投稿_DELETE_ById.java
コマンド
java -classpath .:* -DblogPostingId=1234 BlogPostings_DELETE_ById
コード:
public static void main(String[] args) throws Exception {
BlogPostingResource.Builder builder = BlogPostingResource.builder();
BlogPostingResource blogPostingResource = builder.authentication(
"test@liferay.com", "learn"
).build();
blogPostingResource.deleteBlogPosting(
Long.valueOf(System.getProperty("blogPostingId")));
}
ブログ投稿画像サービス
ブログ画像のcURLコマンドとJavaクラスは、ブログ投稿と同じように機能します。
| ファイル | 説明 |
|---|---|
BlogPostingImages_DELETE_ById.[java\|sh] | ID別にブログ投稿画像を削除します。 |
BlogPostingImages_GET_ById.[java\|sh] | ID別に特定のブログ投稿画像を取得します。 |
BlogPostingImages_POST_ToSites.[java\|sh] | ブログ投稿画像をサイトに投稿します。 |
BlogPostingImages_GET_FromSites.[java\|sh] | サイトからブログ投稿画像のリストを取得します。 |
API エクスプローラー には、 BlogPosting および BlogPostingImage サービスとスキーマがすべて一覧表示され、各サービスを試すためのインターフェースがあります。