ドキュメントショートカットAPIの基本
Liferayのヘッドレス配信アプリケーションは、ドキュメントおよびメディア向けのRESTサービスを提供しており、サイトやアセットライブラリへのドキュメントへのショートカットの追加、情報の一覧表示、変更、削除などが行えます。 これらのサービスは、cURLコマンドとJavaクラスを使用して呼び出すことができます。
Liferay DXP 2024.Q4+/Portal GA129+ Documents 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 に変更してください。
ログインすると、 はサイト ID を取得します。 このIDを複数のサービス呼び出しで使用してください。 この例では、ID は 20117 です。
次に、以下の手順に従ってください。
-
サンプルプロジェクト をダウンロードして解凍します。
curl https://resources.learn.liferay.com/examples/liferay-k9e8.zip -Ounzip liferay-k9e8.zip -
ドキュメントとメディア アプリケーションに 3 つのドキュメントを追加します。 この例では、それらは
crab.jpg、shrimp.jpg、およびbetta.jpgという名前の画像であり、resources/imagesフォルダーに含まれています。 -
文書のIDを取得します。
ショートカットを作成するには、ドキュメントのIDが必要です。 サイト内のドキュメントとそのIDの一覧を取得するには、ターミナルで
Documents_GET_FromSites.shスクリプトを実行します。重要--userオプションで指定されたメールアドレスとパスワードが、スクリプトで使用されているものと一致していることを確認してください。./Documents_GET_FromSites.sh [サイトID]レスポンスで、アップロードされたドキュメントの
IDを見つけます。 この例では、32078はcrab.jpg用、32067はshrimp.jpg用、32054はbetta.jpg 用です。。... "エンコーディング形式" : "image/jpeg"、 "外部参照コード" : "4581bab6-2186-85f0-e384-dba35a897a95"、 "ファイル拡張子" : "jpg"、 "fileName" : "crab.jpg"、 "friendlyUrlPath" : "crab"、 "id" : 32078、 "keywords" : [ ]、 "numberOfComments" : 0、 "関連コンテンツ" : [ ], "レンダリングされたコンテンツ" : [ ], "サイトID" : 20117, "サイズ(バイト)" : 114486, "taxonomyCategoryBriefs" : [ ], "title" : "crab" ... -
フォルダのIDを取得する
フォルダへのショートカットを投稿するには、フォルダのIDが必要です。
DocumentFolders_GET_FromSites.shスクリプトを実行して、サイト内の利用可能なフォルダとその ID を取得します。./DocumentFolders_GET_FromSites.sh [サイトID]これは、すべてのフォルダを含むリストを返します。 該当するファイルがない場合は、Liferayが提供する標準フォルダを使用してください。 この例では、ID は
31637です。... "customFields" : [ ], "dateCreated" : "2024-06-28T10:28:31Z", "dateModified" : "2024-06-28T10:28:31Z"、 "説明" : ""、 "外部参照コード" : "d67f7b14-c9b4-8a24-872b-18c6c0f64efe"、 "id" : 31637、 "name" : "Liferay 提供"、 "ドキュメントフォルダの数" : 0、 "ドキュメントの数" : 7、 "サイトID" : 20117、 "購読済み" : false ... -
アセットライブラリのIDを取得します。
アセットライブラリへのショートカットを投稿するには、アセットライブラリのIDが必要です。
アセットライブラリを作成すると、作成後にそのIDが[全般]タブに表示されます。
既にある場合は、 グローバルメニュー (
) を開き、コンテンツの下にある アプリケーション → アセットライブラリ に移動します。次に、目的のアセットライブラリの アクション (
) をクリックし、 編集 を選択します。 IDは「一般」タブに表示されます。
この例では、ID は
32098です。
これで、ドキュメントのショートカットを投稿できるようになりました。
サイトまたはアセットライブラリへのショートカットを投稿する
サイトやアセットライブラリへのショートカットを投稿してください。 特定のフォルダを選択したり、サイト/アセットライブラリのルートフォルダにファイルを配置したりすることもできます。
- ターミナルで
DocumentShortcuts_POST_ToSites.shを実行して、ショートカットをサイトに投稿します。 パラメータとして、サイトID、フォルダID、およびドキュメントIDを使用します。
ここで使用されている例は、ウェブサイト向けです。 アセットライブラリ向けの例は、リソースの curl および java フォルダーに含まれています。 テストするには、 サイトID を アセットライブラリID に置き換えてください。
./DocumentShortcuts_POST_ToSites.sh [サイトID] [フォルダID] [ドキュメントID]
ドキュメントをサイト/アセットライブラリのルートフォルダに追加するには、 0 を フォルダID として使用します。
端末には同様の出力が表示されます。
{
"アクション" : {
"取得" : {
"メソッド" : "GET"、
"href" : "http://localhost:8080/o/headless-delivery/v1.0/document-shortcuts/32078"
}
},
"dateCreated" : "2024-07-05T12:16:17Z"、
"dateModified" : "2024-07-05T12:16:17Z"、
"folderId" : 31637、
"id" : 32100,
"siteId" : 20117,
"targetDocumentId" : 32078,
"title" : "crab"
}
この例では、 crab.jpg のショートカットが Provided by Liferay フォルダー に投稿されます。 ショートカットアイコン(
)で識別されます。

次に、Javaクラスを使用してショートカットを投稿します。
-
javaフォルダに移動して、Java ソースファイルをコンパイルします。cd ../javajavac -classpath .:* *.java -
以下の
DocumentShortcuts_POST_ToSitesクラスを実行して、ドキュメントとメディアにショートカットを投稿します。siteIdシステム プロパティ値をサイトの ID に、folderIdをショートカットを配置するフォルダーの ID に、targetDocumentIdをショートカットのターゲット ドキュメントに置き換えます。java -classpath .:* -DsiteId=1234 -DfolderId=1234 -DtargetDocumentId=1234 DocumentShortcuts_POST_ToSites注記ユーザー名とパスワードがそれぞれ
test@liferay.comおよびlearnでない場合は、DocumentShortcuts_POST_ToSites.javaファイル内のこれらの値を置き換えて、実行する前にクラスを再コンパイルしてください。
このクラスは、サイトの「ドキュメントとメディア」指定フォルダ内に、対象ドキュメントへのショートカットを作成します。
cURLコマンドとJavaクラスの仕組みについては、以下をお読みください。
cURLコマンドを調べてみましょう
DocumentShortcuts_POST_ToSites.sh および DocumentShortcuts_POST_ToAssetLibraries.sh スクリプトは、cURL を使用して ヘッドレス配信 アプリケーション REST サービスを呼び出すことにより、ショートカットを投稿します。
コマンドの引数は以下のとおりです。
| 引数 | 説明 |
|---|---|
"http://localhost:8080/o/headless-delivery/v1.0/sites/${1}/document-shortcuts" | RESTサービスのエンドポイント。 サイトIDパラメータは、 ${1} を置き換えます。 |
"http://localhost:8080/o/headless-delivery/v1.0/asset-libraries/${1}/document-shortcuts" | RESTサービスのエンドポイント。 アセットライブラリIDパラメータは、 ${1} を置き換えます。 |
--データ-生 | リクエストボディで送信される生のJSONデータ。 ${2} および ${3} は、フォルダ ID とドキュメント ID のプレースホルダーです。 |
--header "Accept: application/json" | クライアントがJSON形式のレスポンスを期待していることを指定します。 |
--header "Content-Type: application/json"\ | サーバーに送信されるリソースのメディアタイプ(MIMEタイプ)はJSONです。 |
--リクエスト "POST" | 指定されたエンドポイントで呼び出すHTTPメソッド。 |
--user "test@liferay.com:learn" | 基本認証情報。 |
ここでは、デモンストレーション目的で基本認証を使用しています。 本番環境では、 OAuth 2.0 を介してユーザーを認証する必要があります。 OAuth2 を使用する React アプリケーションの例については、 OAuth2 を使用してユーザーを認証する を参照してください。
DocumentShortcut REST サービス用の他の cURL コマンドも同様の引数を使用します。
Javaクラスを調べます
DocumentShortcuts_POST_ToSites.java および DocumentShortcuts_POST_ToAssetLibraries.java クラスは、 ヘッドレス配信 アプリケーション REST サービスを呼び出すことでショートカットを投稿します。
| 行(省略形) | 説明 |
|---|---|
DocumentShortcutResource.Builder builder = ... | Builder を取得して、 DocumentShortcutResource サービス インスタンスを生成します。 |
DocumentShortcutResource documentShortcutResource = builder.authentication(...).build(); | 基本認証を指定し、 DocumentShortcutResource サービス インスタンスを生成します。 |
DocumentShortcut documentShortcut = documentShortcutResource.postSiteDocumentShortcut(...); | DocumentShortcutResource.postSiteDocumentShortcut メソッドを呼び出し、サイト ID とドキュメント ショートカットを表す DocumentShortcut オブジェクトを渡します。 |
DocumentShortcut documentShortcut = documentShortcutResource.postAssetLibraryDocumentShortcut(...); | DocumentShortcutResource.postAssetLibraryDocumentShortcut メソッドを呼び出し、アセットライブラリ ID とドキュメントショートカットを表す DocumentShortcut オブジェクトを渡します。 |
プロジェクトには、依存関係としてcom.liferay.headless.delivery.client.jarファイルが含まれていることに注意してください。 すべてのRESTアプリケーションのクライアントJAR依存関係情報は、/o/apiでインストール先のAPIエクスプローラーで確認できます。
main メソッドのコメントは、クラスを実行する方法を示しています。
他の例の Java クラスはこれに似ていますが、異なる DocumentShortcutResource メソッドを呼び出します。
サービスの詳細については、 DocumentShortcutResource を参照してください。
以下は、cURL と Java を使用して他の DocumentShortcut REST サービスを呼び出す例です。
ショートカットを取得
サイトまたはアセットライブラリからドキュメントショートカットを一覧表示できます。 特定のショートカットに関する情報は、そのIDを使用して取得することもできます。
サイトまたはアセットライブラリからショートカットを取得する
サイトからドキュメントショートカットの一覧を表示するには、次のcURLコマンドまたはJavaクラスを実行します。 上記と同様に、 [site-ID]/[asset-library-ID] をそれぞれサイト/アセットライブラリのIDに置き換えてください。
./DocumentShortcuts_GET_FromSites.sh [サイトID]
端末には同様の出力が表示されます。
{
...
"ファセット" : [ ],
"アイテム" : [ {
"アクション" : {
"取得" : {
"メソッド" : "GET"、
"href" : "http://localhost:8080/o/headless-delivery/v1.0/document-shortcuts/32078"
}
}、
"dateCreated" : "2024-07-05T12:16:17Z"、
"dateModified" : "2024-07-05T12:16:17Z"、
"フォルダ ID" : 31637,
"ID" : 32100,
"サイト ID" : 20117,
"targetDocumentId" : 32078,
"タイトル" : "カニ"
} ],
"最終ページ" : 1,
"ページ" : 1,
"pageSize" : 20,
"totalCount" : 1
}
Javaクラスを実行することもできます。
java -classpath .:* -DsiteId=1234 DocumentShortcuts_GET_FromSites
ショートカットに関する情報、ショートカットが保存されているサイト/アセットライブラリ、ショートカットが指すドキュメント、そのID、タイトル、作成日、更新日、およびドキュメントに関連するその他の詳細情報を確認できます。
アセットライブラリに保存されているショートカットには、レスポンスに assetLibraryKey フィールドが含まれます。
特定のショートカットを取得する
以下のcURLコマンドまたはJavaコマンドを実行することで、特定のショートカットを取得できます。 [shortcut-ID] をショートカットの ID に置き換えてください。
./DocumentShortcuts_GET_ById.sh [shortcut-ID]
assetLibraryKey がリストされていない場合、ショートカットはサイトにあります。
...
"作成日": "2024-07-05T12:16:17Z"、
"更新日": "2024-07-05T12:16:17Z"、
"フォルダ ID": 31637,
"ID": 32100,
"サイト ID": 20117,
"targetDocumentId": 32078,
"タイトル": "カニ"
...
逆に、ショートカットがアセットライブラリに保存されている場合は、出力に assetLibraryKey フィールドが表示されます。
...
"assetLibraryKey": "Asset Library",
"dateCreated": "2024-07-05T12:30:58Z",
"dateModified": "2024-07-05T12:30:58Z"、
"フォルダ ID": 0,
"ID": 32102,
"サイトID": 32099,
"targetDocumentId": 32078,
"title": "crab"
...
Javaクラスを実行することもできます。
java -classpath .:* -DdocumentShortcutId=1234 DocumentShortcuts_GET_ById
ショートカットをパッチする
PATCHサービスは、ショートカット内の特定のフィールドを更新します。 ショートカットを更新するには、以下のcURLコマンドまたはJavaコマンドを実行してください。
この演習では、Provided by Liferay フォルダーに追加されたショートカットから [shortcut-ID] を使用します。 [folder-ID] をフォルダ ID に置き換え、 [target-document-ID] を shrimp.jpg の画像 ID に置き換えます。 これによりショートカットが更新され、画像が crab.jpg から shrimp.jgp に変更されます。
DocumentShortcuts_PATCH_ById.sh
コマンド:
./DocumentShortcuts_PATCH_ById.sh [ショートカットID] [フォルダID] [対象ドキュメントID]
...
--data-raw '{
"folderId": '{$2}',
"targetDocumentId": '{$3}',
"viewableBy": "Anyone"
}' \
...
PATCHリクエストはターゲットドキュメントを更新し、 shrimp.jpg 画像を参照するようになります。

次に、スクリプトを再度実行し、 folderId フィールドを 0 に変更して、ショートカットをサイトのルートフォルダに移動してみてください。

DocumentShortcuts_PATCH_ById.java
コマンド:
java -classpath .:* -DdocumentShortcutId=1234 -DfolderId=1234 -DtargetDocumentId=1234 DocumentShortcuts_PATCH_ById
Java クラスは DocumentShortcutResourceの patchDocument メソッドを呼び出し、 DocumentShortcutの ID、更新するフィールドを含む DocumentShortcut オブジェクトを渡します。
folderId と targetDocumentId を変更して、ショートカットの保存場所とその参照先を変更します。
ショートカットを作成する
PUTサービスは、ショートカットとそのフィールドを完全に置き換えます。 以下のcURLコマンドまたはJavaコマンドを実行することで、ショートカットを置き換えることができます。
この演習では、前回の PATCH リクエストで Provided by Liferay フォルダーに移動したショートカットから [shortcut-ID] を使用します。 [folder-ID] を Liferay が提供するフォルダー ID に、 [target-document-ID] を betta.jpg 画像 ID に置き換えてください。 これによりショートカットが更新され、Liferay によって提供されるフォルダーに戻され、画像が shrimp.jpg から betta.jgp に変更されます。
DocumentShortcuts_PUT_ById.sh
コマンド:
./DocumentShortcuts_PUT_ById.sh [ショートカットID] [フォルダID] [対象ドキュメントID]
ショートカットは、Provided by Liferay フォルダーに戻っており、 betta.jpg 画像を参照しています。

DocumentShortcuts_PUT_ById.java
コマンド:
java -classpath .:* -DdocumentShortcutId=1234 -DfolderId=1234 -DtargetDocumentId=1234 DocumentShortcuts_PUT_ById
Java クラスは DocumentShortcutResourceの putDocument メソッドを呼び出し、 DocumentShortcutの ID と、 DocumentShortcut オブジェクトを渡します。このオブジェクトには、 DocumentShortcutの フォルダーの値が含まれています。 および targetDocument フィールド。
上記の cURL コマンドと Java クラスは、 DocumentShortcut インスタンスを完全に新しいものに置き換えます。
ショートカットを削除する
以下のcURLコマンドまたはJavaコマンドを実行して、ショートカットを削除します。 [shortcut-ID] をショートカットの ID に置き換えてください。
操作が成功した場合、コード204が返され、何も返されません。
DocumentShortcuts_DELETE_ById.sh
コマンド:
./DocumentShortcuts_DELETE_ById.sh [shortcut-ID]
DocumentShortcuts_DELETE_ById.java
指示
java -classpath .:* -DdocumentShortcutId=1234 DocumentShortcuts_DELETE_ById
DocumentShortcutは、ドキュメントとメディアから削除されます。