オブジェクトAPIの基本
オブジェクトを公開すると、Liferayは自動的にそのためのREST APIを生成します。 これらのAPIは、会社とサイトに範囲指定されたオブジェクトで異なりますが、すべてc/[pluralobjectlabel] の命名パターン(例: c/timeoffrequests)を使用します。 これらのAPIを使用して、オブジェクトエントリーの作成、アクセス、更新、および削除を行うことができます。
ここでは、cURLコマンドを使用して、カスタムオブジェクトの基本的なCRUD操作を実行します。 続行する前に、 新しい Liferay DXP/Portal 7.4 インスタンスをセットアップ し、提供されているチュートリアル コードを 準備 してください。
サイト オブジェクトと 会社 オブジェクトの両方に対して生成された API の完全なリストについては、 オブジェクトのヘッドレス フレームワーク統合を参照してください。 Liferay API Explorer の [server]:[port]/o/api (例: localhost:8080/o/api)からカスタムオブジェクト API を表示およびテストできます。 これらは REST アプリケーションの下に表示されます。
Liferayインスタンスのセットアップ
新しい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に変更します。
次に、次の手順に従って、このチュートリアルの基本的なオブジェクトを 作成 します。
-
グローバル メニュー (
) を開き、 コントロール パネル タブに移動して、 オブジェクトをクリックします。 -
追加 ボタン (
) をクリックし、次の値を入力します。項目 値 ラベル Able複数形のラベル Ables名前 Able -
新しい オブジェクト ドラフトを選択し、 フィールド タブに移動して、テキスト フィールドを 1 つ追加します。
ラベル 項目名 種類 必須 名前 name テキストボックス ✔ -
詳細 タブに移動し、 公開をクリックします。
重要このチュートリアルでは、上記の値を使用する必要があります。
オブジェクトを公開する と、データを受信して保存するための新しいアプリケーションが作成され、アクティブ化されます。 ヘッドレスAPIを介してアクセスできるようになりました。
サンプルコードを準備する
以下のコマンドを実行して、提供されたサンプルコードをダウンロードし、解凍してください。
curl https://resources.learn.liferay.com/examples/liferay-v1s4.zip -O
unzip liferay-v1s4.zip
これらのスクリプトには、以下のAPIが含まれています。
| HTTP メソッド | HTTPエンドポイント | 説明 |
|---|---|---|
| GET | / | Liferayインスタンス内のオブジェクトエントリの完全なリストを返します。結果はページ付け、フィルタリング、検索、並べ替えが可能です。 |
| POST | / | API呼び出しで提供された詳細を使用して新しいオブジェクトエントリを作成します |
| DELETE | /{objectNameId} | 指定されたオブジェクトエントリを削除し、操作が成功した場合は204を返します。 |
| GET | /{objectNameId} | 指定されたオブジェクトエントリの詳細を返します |
| PUT | /{objectNameId} | 指定されたオブジェクトエントリの詳細をAPI呼び出しで提供された詳細に置き換えます |
| GET | /{objectNameId}/permissions | 指定されたオブジェクトエントリ権限の詳細を返します |
| PUT | /{objectNameId}/permissions | 指定されたオブジェクトエントリ権限の詳細を、API呼び出しで提供された詳細に置き換えます。 |
カスタムオブジェクトのAPIを呼び出す
-
サンプルコードをダウンロード後、
liferay-v1s4プロジェクト内のcurlフォルダに移動します。cd liferay-v1s4/curl -
Ables_POST_ToCompanyを実行します。 これにより、3つのエントリーが作成されます。./Ables_POST_ToCompany.shターミナルには、新しく作成されたエントリーの完全なスキーマが表示されます。 次のメソッドで使用するために、最初のエントリーのIDをコピーします。
{ "id" : 41969, ... "name" : "Able 1" } { "id" : 41971, ... "name" : "Able 2" } { "id" : 41973, ... "name" : "Able 3" } -
Ables_GET_FromCompanyを実行します。 オブジェクトエントリーのリストが返されます。./Ables_GET_FromCompany.sh -
最初のエントリのIDをパラメータとして、
Ables_PUT_ByIdを実行します。 これにより、指定されたエントリーの詳細がAPI呼び出しで提供された詳細に置き換えられます。./Ables_PUT_ById.sh {entry-id}{ "id" : 41969, ... "name" : "Able One" } -
パラメータと同じIDを使用して、
Ables_DELETE_ByIdを実行します。 これにより、指定したエントリーが削除されます。./Ables_DELETE_ById.sh {entry-id} -
パラメータと同じIDを使用して、
Ables_GET_ByIdを実行します。 これにより、指定されたエントリーが存在する場合はその詳細が返されます。./Ables_GET_ById.sh {entry-id}前の手順でエントリーを削除したため、次のメッセージが返されます。
{ "status": "NOT_FOUND", "title": "No ObjectEntry exists with the primary key 41969" }
サンプルのcURLスクリプトの検証
以下は、チュートリアルのcURLコマンドの例です。
Ables_POST_ToCompany.sh
curl \
"http://localhost:8080/o/c/ables/" \
--data-raw '
{
"name": "Able 1"
}' \
--header "Content-Type: application/json" \
--request "POST" \
--user "test@liferay.com:learn"
curl \
"http://localhost:8080/o/c/ables/" \
--data-raw '
{
"name": "Able 2"
}' \
--header "Content-Type: application/json" \
--request "POST" \
--user "test@liferay.com:learn"
curl \
"http://localhost:8080/o/c/ables/" \
--data-raw '
{
"name": "Able 3"
}' \
--header "Content-Type: application/json" \
--request "POST" \
--user "test@liferay.com:learn"
Ables_PUT_ById.sh
curl \
"http://localhost:8080/o/c/ables/${1}" \
--data-raw '
{
"name": "Able One"
}' \
--header "Content-Type: application/json" \
--request "PUT" \
--user "test@liferay.com:learn"
オブジェクト権限の管理
オブジェクト API を使用して、オブジェクト エントリの権限を読み取り、更新します。 詳細については、 オブジェクト アプリケーションの権限 を参照してください。
-
Ables_GET_Permissionsを実行して、オブジェクトのエントリ権限のリストを取得します。./Ables_GET_Permissions.sh {entry-id}この例では、すべてのロールの権限が返されます。 特定のロールの権限を取得するには、
roleNamesクエリ パラメータを使用します。curl \ "http://localhost:8080/o/c/ables/${1}/permissions?roleNames=Site%20Member" \ --user "test@liferay.com:learn"この例では、唯一のロールは 所有者であり、その権限は削除、権限、更新、および表示です。
{ "actions": { "get": { "method": "GET", "href": "http://localhost:8080/o/c/ables/41969/permissions" }, "replace": { "method": "PUT", "href": "http://localhost:8080/o/c/ables/41969/permissions" } }, "facets": [], "items": [ { "actionIds": [ "DELETE", "PERMISSIONS", "UPDATE", "VIEW" ], "roleName": "Owner" } ], "lastPage": 1, "page": 1, "pageSize": 1, "totalCount": 1 } -
エントリ ID をパラメータとして
Ables_PUT_Permissionsを実行し、エントリの詳細を API 呼び出しで提供された詳細に置き換えます。./Ables_PUT_Permissions.sh {entry-id}更新権限が所有者ロールから削除されました。
{ "actions": { "get": { "method": "GET", "href": "http://localhost:8080/o/c/ables/41969/permissions" }, "replace": { "method": "PUT", "href": "http://localhost:8080/o/c/ables/41969/permissions" } }, "facets": [], "items": [ { "actionIds": [ "DELETE", "PERMISSIONS", "VIEW" ], "roleName": "Owner" } ], "lastPage": 1, "page": 1, "pageSize": 1, "totalCount": 1 }
オブジェクトタグとカテゴリの管理
オブジェクト API を使用すると、分類が有効になっているオブジェクト エントリのタグとカテゴリを読み取り、設定、更新できます。 詳細については、 タグとカテゴリ を参照してください。
タグは キーワード プロパティによって表されます。 キーワード 配列を POST、PUT、または PATCH リクエストの本文に追加することで、タグを設定または更新できます。
"keywords" : [
"tag1", "tag2", "tag3"
]
オブジェクト エントリに対して GET リクエストを行った後、同じ キーワード 配列でそのタグを読み取ることができます。
taxonomyCategoryIds 配列を POST、PUT、または PATCH リクエストに追加することで、オブジェクト エントリのカテゴリを設定および更新できます。
"taxonomyCategoryIds" : [
1234, 5678
]
オブジェクト エントリにカテゴリを割り当てるには、既存のカテゴリの語彙が必要です。 詳細については、 コンテンツのカテゴリと語彙の定義 を参照してください。
オブジェクト エントリに対して GET リクエストを行うと、割り当てられたカテゴリごとに taxonomyCategoryBriefs 配列でそのカテゴリを読み取ることができます。この配列には、 taxonomyCategoryId と taxonomyCategoryName が含まれています。
entryReference ネストされたフィールドの動作には、Liferay DXP 2026.Q1+ が必要です。 以前のバージョンでオブジェクト JSON をエクスポートするとこれらの値が省略され、インポートしても効果はありません。
entryReference ネストされたフィールドには、関連付けられているオブジェクト エントリとそのスコープ (サイト、アセット ライブラリ、または Liferay インスタンス) の外部参照コードも含まれます。 同じ JSON がインポートされると、これらのカテゴリはインポートされたオブジェクト エントリに自動的に関連付けられます (存在しない場合は、一致する空のカテゴリが作成されます)。
"taxonomyCategoryBriefs": [
{
"taxonomyCategoryId": 1234,
"taxonomyCategoryName": "Category A",
"entryReference":
{
"externalReferenceCode": "entryerc-1234-5678-1234-123456789012",
"scope": {
"externalReferenceCode": "siteerc1-1234-5678-1234-123456789012",
"type:" "Site"
}
}
},
{
"taxonomyCategoryId": 5678,
"taxonomyCategoryName": "Category B",
"entryReference":
{
"externalReferenceCode": "entryerc-5678-1234-5678-678901234567",
"scope": {
"externalReferenceCode": "siteerc2-5678-1234-5678-678901234567",
"type": "Site"
}
}
}
]
API クエリ パラメータで説明されているルールに従って、オブジェクト エントリを キーワード および taxonomyCategoryIds でフィルターできます。 フィルタ文字列の例は次のようになります。
-
keywords/any(k:k in ('tag1','tag2'))は、tag1またはtag2でタグ付けされたすべてのオブジェクトエントリを取得します。 -
taxonomyCategoryIds/any(k:k in (1234,5678))は、ID1234または5678のカテゴリにリンクされているすべてのエントリを取得します。
API クエリ パラメータで説明されている構文を使用して、関連オブジェクトのフィールドごとにオブジェクト エントリを並べ替えることができます。 並べ替え文字列の例は次のようになります。
-
sort=relatedRelationship/fieldName:ascは、直接関連するオブジェクトのフィールドに基づいてエントリを昇順で並べ替えます。 -
sort=relatedRelationship1/relatedRelationship1/fieldName:descは、ネストされた関連オブジェクトのフィールドに基づいてエントリを降順で並べ替えます。
nestedFieldsパラメータを使用して追加の詳細を取得する
一部の情報は、ネストされたフィールドとしてオブジェクトの API 応答に埋め込まれます。
| パラメータ値 | 説明 |
|---|---|
nestedFields=[fieldName].fileBase64 | 添付ファイルフィールドの Base64 エンコードを返します。 |
nestedFields=[fieldName].folder | Base64 でエンコードされた添付ファイルが保存されている フォルダーを返します。 |
nestedFields=auditEvents | エントリ履歴が有効になっている場合、エントリの監査イベントを 返します。 |
nestedFields=[firstObjectRelationship],[secondObjectRelationship] | 個の関連オブジェクトエントリを返します。 |
nestedFields=profileURL | エントリ作成者ユーザーのプロフィール URL を返します。 |
nestedFields=permissions | エントリの役割と権限を返します。 Liferay DXP 2024.Q4以降/Portal GA129以降で利用可能 |
たとえば、エンドポイント http://localhost:8080/o/c/ables/41969?nestedFields=permissions を呼び出すと、API レスポンスで permissions 要素が返されます。
"permissions" : [ {
"actionIds" : [ "DELETE", "PERMISSIONS", "UPDATE", "VIEW" ],
"roleName" : "Owner"
} ],