Digital Asset Management APIs
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

ドキュメントAPIの基本

Liferay のヘッドレス配信アプリケーションは、ドキュメントやフォルダの追加、情報の一覧表示、変更、削除などを行う ドキュメントとメディア 用の REST サービスを提供します。 これらのサービスは、cURL コマンドと Java クラスを使用して呼び出すことができます。

Liferay DXP 2024.Q4+/Portal GA129+ Documents APIは、ドキュメントのエントリ、フォルダ、タイプ、メタデータセット、ショートカットを参照するために外部参照コード(ERC)を使用するようになりました。これにより、インスタンス間で一貫した識別が可能になり、バッチエクスポート/インポートがサポートされて、コンテンツの管理と移植性が向上します。

サンプルのcURLコマンドとJavaクラスを使用してドキュメントをアップロードすることから始めます。

ドキュメントを投稿する

新しい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 を複数のサービス呼び出しで使用します。

次に、以下の手順に従います。

  1. サンプルプロジェクトをダウンロードして解凍します。

    curl https://resources.learn.liferay.com/examples/liferay-g9i6.zip -O
    
    unzip liferay-g9i6.zip
    

cURL スクリプトを使用して、ファイルを ドキュメントとメディアにアップロードします。

  1. コマンドラインで、curlフォルダに移動します。

    	cd liferay-g9i6.zip/curl
    
  2. サイト ID をパラメータとして Documents_POST_ToSites.sh スクリプトを実行してファイルをアップロードします。 例えば、

    ./Documents_POST_ToSites.sh 1234
    

    ユーザー名とパスワードがそれぞれ test@liferay.comlearnでない場合は、実行する前に Documents_POST_ToSites.sh スクリプトでそれらの値を置き換えてください。

スクリプトは、それ自体をサイトのドキュメントとメディアにアップロードします。

ドキュメントとメディアにアップロードされたファイル。

コマンド応答は、次のように、JSONで新しいドキュメントとメディアファイルを記述します。

{
  ...
  "description": "",
  ...
  "id": 38301,
  ...
  "title": "Documents_POST_ToSites.sh"
}

応答には、ファイルの説明、新しく割り当てられたID、タイトルなどが含まれます。 idの値を後のコマンドのためにメモしておきます。

次に、Java クラスを使用してファイルをアップロードします。

  1. javaフォルダに移動し、Javaソースファイルをコンパイルします。

    cd ../java
    
    javac -classpath .:* *.java
    
  2. 以下の Documents_POST_ToSites クラスを実行し、 siteId システム プロパティ値をサイトの ID に置き換えて、ファイルを Documents and Media にアップロードします。

    java -classpath .:* -DsiteId=1234 Documents_POST_ToSites
    

    ユーザー名とパスワードがそれぞれ test@liferay.comtestでない場合は、 Documents_POST_ToSites.java ファイルでそれらの値を置き換え、クラスを実行する前に再コンパイルします。

クラスは、ソース ファイル Documents_POST_ToSites.java を Documents and Media にアップロードします。

JavaクラスはJavaソースファイルをアップロードしました。

cURLコマンドとJavaクラスの仕組みをご覧ください。

cURLコマンドの検証

Documents_POST_ToSites.sh スクリプトは、cURL を使用して ヘッドレス配信 アプリケーション REST サービスを呼び出してファイルをアップロードします。

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/sites/${1}/documents" \
	--form "file=@Document_POST_ToSite.sh" \
	--header "Content-Type: multipart/form-data" \
	--request "POST" \
	--user "test@liferay.com:learn"

ここでは、コマンドの引数を紹介します。

引数説明
-F "file=@Documents_POST_ToSites.sh"投稿するファイル。
-H "Content-Type: multipart/form-data"投稿されるメディア タイプ (MIME タイプ)。
-X POST指定されたエンドポイントで呼び出すHTTPメソッド。
"http://localhost:8080/o/headless-delivery/v1.0/sites/${1}/documents"RESTサービスエンドポイント。 サイトIDのパラメーターが${1}に置き換わります。
-u "test@liferay.com:learn"基本認証の資格情報。

ここでは、デモのために基本的な認証を使用しています。 本番環境では、 OAuth 2.0経由でユーザーを認証する必要があります。 OAuth2 を使用するサンプル React アプリケーションについては、 OAuth2 を使用してユーザーを承認する を参照してください。

ヒント

サイトではなく特定のフォルダーにドキュメントを投稿するには、REST サービス エンドポイントとして http://localhost:8080/o/headless-delivery/v1.0/document-folders/{documentFolderId}/documents を使用し、 {documentFolderId} をフォルダーの ID に置き換えます。

DocumentおよびDocumentFolder RESTサービスの他のcURLコマンドは、同様の引数を使用します。

次に、Java 呼び出しがどの程度似ているかを確認します。

Javaクラスを調べる

Documents_POST_ToSites.java クラスは、 ヘッドレス配信 アプリケーション REST サービスを呼び出してファイルをアップロードします。

public static void main(String[] args) throws Exception {
	DocumentResource.Builder builder = DocumentResource.builder();

	DocumentResource documentResource = builder.authentication(
		"test@liferay.com", "learn"
	).build();

	System.out.println(
		documentResource.postSiteDocument(
			Long.valueOf(System.getProperty("siteId")), new Document(),
			new HashMap<String, File>() {
				{
					put("file", new File("Documents_POST_ToSites.java"));
				}
			}));
}

このクラスは、わずか3行のコードでRESTサービスを呼び出します。

行(省略形)説明
DocumentResource.Builder builder = ...Builderを取得し、DocumentResourceサービスインスタンスを生成します。
DocumentResource documentResource = builder.authentication(...).build();基本認証を指定し、DocumentResourceサービスインスタンスを生成します。
Document document = documentResource.postSiteDocument(...);DocumentResource.postSiteDocumentメソッドを呼び出し、サイトID、アップロードされたファイルを表すDocumentオブジェクト、およびアップロードするファイルを指定するハッシュマップを渡します。 ファイルは任意です–この例では、便宜上、ローカル ファイル Documents_POST_ToSites.java を使用します。
ヒント

サイトではなく特定のフォルダーにドキュメントを投稿するには、 postSiteDocumentの代わりに DocumentResource.postDocumentFolderDocument を使用します。 最初のパラメータとしてフォルダ ID を渡します。他の引数は同じままです。

プロジェクトには、依存関係としてcom.liferay.headless.delivery.client.jarファイルが含まれていることに注意してください。 すべてのRESTアプリケーションのクライアントJAR依存関係情報は、/o/apiでインストール先のAPIエクスプローラーで確認できます。

メイン メソッドのコメントは、クラスの実行を示しています。

他の例のJavaクラスはこれと類似していますが、異なるDocumentResourceメソッドを呼び出します。

重要

サービスの詳細については、 DocumentResource を参照してください。

以下は、cURLとJavaを使って、他のDocument RESTサービスを呼び出す例です。

サイトドキュメントを取得する

次のcURLまたはJavaコマンドを実行すると、サイトのドキュメントを一覧表示できます。 上記のように、1234をサイトのIDに置き換えてください。

Documents_GET_FromSites.sh

コマンド:

./Documents_GET_FromSites.sh 1234

コード:

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/sites/${1}/documents" \
	--user "test@liferay.com:learn"

Documents_GET_FromSites.java

コマンド:

java -classpath .:* -DsiteId=1234 Documents_GET_FromSites

コード:

public static void main(String[] args) throws Exception {
	DocumentResource.Builder builder = DocumentResource.builder();

	DocumentResource documentResource = builder.authentication(
		"test@liferay.com", "learn"
	).build();

	System.out.println(
		documentResource.getSiteDocumentsPage(
			Long.valueOf(System.getProperty("siteId")), null, null, null,
			null, Pagination.of(1, 2), null));
}

サイトの Document オブジェクトが JSON レスポンスに含まれます。

{
  "actions": {
    "updateBatch": {
      "method": "PUT",
      "href": "http://localhost:8080/o/headless-delivery/v1.0/documents/batch"
    },
    "get": {
      "method": "GET",
      "href": "http://localhost:8080/o/headless-delivery/v1.0/sites/1234/documents"
    },
    "create": {
      "method": "POST",
      "href": "http://localhost:8080/o/headless-delivery/v1.0/sites/1234/documents"
    },
    "createBatch": {
      "method": "POST",
      "href": "http://localhost:8080/o/headless-delivery/v1.0/sites/1234/documents/batch"
    },
    "deleteBatch": {
      "method": "DELETE",
      "href": "http://localhost:8080/o/headless-delivery/v1.0/documents/batch"
    }
  },
  "facets": [],
  "items": [
    {
      "actions": {
        "get-rendered-content-by-display-page": {
          "method": "GET",
          "href": "http://localhost:8080/o/headless-delivery/v1.0/documents/32131/rendered-content-by-display-page/{displayPageKey}"
        },
        "get": {
          "method": "GET",
          "href": "http://localhost:8080/o/headless-delivery/v1.0/documents/32131"
        },
        "replace": {
          "method": "PUT",
          "href": "http://localhost:8080/o/headless-delivery/v1.0/documents/32131"
        },
        "update": {
          "method": "PATCH",
          "href": "http://localhost:8080/o/headless-delivery/v1.0/documents/32131"
        },
        "delete": {
          "method": "DELETE",
          "href": "http://localhost:8080/o/headless-delivery/v1.0/documents/32131"
        }
      },
      "adaptedImages": [
        {
          "contentUrl": "/o/adaptive-media/image/32131/Preview-1000x0/seahorse.jpg?t=1715340699885",
          "height": 1510,
          "resolutionName": "Preview-1000x0",
          "sizeInBytes": 127254,
          "width": 1000
        },
        {
          "contentUrl": "/o/adaptive-media/image/32131/Thumbnail-300x300/seahorse.jpg?t=1715340699885",
          "height": 300,
          "resolutionName": "Thumbnail-300x300",
          "sizeInBytes": 10927,
          "width": 199
        }
      ],
      "contentUrl": "/documents/1234/0/seahorse.jpg/4be7d2ff-b9ac-a7ab-1081-537536ece7d9?version=1.0&t=1715340699885&download=true",
      "creator": {
        "additionalName": "",
        "contentType": "UserAccount",
        "familyName": "Test",
        "givenName": "Test",
        "id": 20122,
        "name": "Test Test"
      },
      "customFields": [],
      "dateCreated": "2024-05-10T11:29:14Z",
      "dateModified": "2024-05-10T11:31:39Z",
      "description": "",
      "documentFolderId": 0,
      "documentType": {
        "availableLanguages": [],
        "contentFields": [],
        "description": "",
        "name": "Basic Document"
      },
      "encodingFormat": "image/jpeg",
      "externalReferenceCode": "4be7d2ff-b9ac-a7ab-1081-537536ece7d9",
      "fileExtension": "jpg",
      "fileName": "seahorse.jpg",
      "friendlyUrlPath": "seahorse-friendly-url",
      "id": 32131,
      "keywords": [],
      "numberOfComments": 0,
      "relatedContents": [],
      "renderedContents": [],
      "siteId": 1234,
      "sizeInBytes": 792227,
      "taxonomyCategoryBriefs": [],
      "title": "seahorse"
    }
  ],
  "lastPage": 1,
  "page": 1,
  "pageSize": 20,
  "totalCount": 1
}

レスポンスから、次のようないくつかの情報を抽出できます。

  • 取得、更新、置換、削除など、ドキュメントに対して実行できるアクションのリスト。

  • ドキュメントのコンテンツにアクセスするためのドキュメントの contentUrl

  • ドキュメントの 作成者に関する情報(名前と ID を含む)。

  • dateCreateddateModified は、それぞれドキュメントが作成された日時と最後に変更された日時を示すタイムスタンプです。

  • Liferay DXP 2024.Q2+/Portal GA120+ドキュメントの [friendlyUrlPath](../../../digital-asset-management/uploading-and-managing/configuring-document-urls.md) は、ファイル名またはユーザーが設定したカスタマイズされた値になります。

ドキュメントを取得する

次のcURLまたはJavaコマンドを実行すると、Documentのフィールドを取得できます。 1234DocumentのIDに置き換えてください。

ヒント

Documents_GET_FromSites.[java|sh] を使用して、サイト ドキュメント ID を取得します。

Documents_GET_ById.sh

コマンド:

./Documents_GET_ById.sh 1234

コード:

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/documents/${1}" \
	--user "test@liferay.com:learn"

Documents_GET_ById.java

コマンド:

java -classpath .:* -DdocumentId=1234 Documents_GET_ById

コード:

public static void main(String[] args) throws Exception {
	DocumentResource.Builder builder = DocumentResource.builder();

	DocumentResource documentResource = builder.authentication(
		"test@liferay.com", "learn"
	).build();

	System.out.println(
		documentResource.getDocument(
			Long.valueOf(System.getProperty("documentId"))));
}

ドキュメント フィールドは JSON レスポンスに含まれます。

ドキュメントの内容を取得する

DocumentコンテンツはBase64でエンコードされ、DocumentnestedFieldsに埋め込まれます。 次のcURLまたはJavaコマンドを実行すると、コンテンツを取得できます。 1234DocumentのIDに置き換えてください。

Documents_GET_ContentValue_ById.sh

コマンド:

./Documents_GET_ContentValue_ById.sh 1234

コード:

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/documents/${1}?nestedFields=contentValue&fields=contentValue" \
	--user "test@liferay.com:learn" \
	| sed -n "2 p" \
	| awk -F ":" '{print $2}' \
	| tr -d " \"" \
	| base64 -d

最初の引数行は、サービスエンドポイントと認証クレデンシャルをそれぞれ指定します。 URLの/o/headless-delivery/v1.0/documents/${1}部分は、IDでDocumentを取得するためのRESTサービスエンドポイントです。 この URL は Documents_GET_ById.sh スクリプトの URL と同じです。 ?nestedFields=contentValue部分は、DocumentnestedFieldsに埋め込まれたcontentValueを要求します。 最後に、&fields=contentValue部分がcontentValueフィールドで絞り込みを行い、コンテンツフィールドのみが返されます。 ただし、サービスのみを呼び出すと、次のように JSON でラップされた Base64 でエンコードされたコンテンツが返されます。

{
  "contentValue" : "Y3VybCBcCgktRiAiZmlsZT1ARG9jdW1lbnRfUE9TVF9Ub1NpdGUuc2giIFwKCS1IICJDb250ZW50LVR5cGU6IG11bHRpcGFydC9mb3JtLWRhdGEiIFwKCS1YIFBPU1QgXAoJImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9vL2hlYWRsZXNzLWRlbGl2ZXJ5L3YxLjAvc2l0ZXMvJHsxfS9kb2N1bWVudHMiIFwKCS11ICJ0ZXN0QGxpZmVyYXkuY29tOnRlc3Qi"
}

サービス呼び出しに続くルーチンで、エンコードされたコンテンツが処理されます。 sedルーチンとawkルーチンは、Documentコンテンツ値を分離し、trルーチンはそれをデコードします。 アップロードした Documents_POST_ToSites.sh Document に対して返されたデコードされたコンテンツは次のとおりです。

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/documents/${1}?nestedFields=contentValue&fields=contentValue" \
	--user "test@liferay.com:learn" \
	| sed -n "2 p" \
	| awk -F ":" '{print $2}' \
	| tr -d " \"" \
	| base64 -d

Documents_GET_ContentValue_ById.java

Documentコンテンツを取得してデコードするJavaコードは、前のcURLコマンドよりも簡単です。

コマンド:

java -classpath .:* -DdocumentId=1234 Documents_GET_ContentValue_ById

コード:

public static void main(String[] args) throws Exception {
	DocumentResource.Builder builder = DocumentResource.builder();

	builder.parameter("nestedFields", "contentValue");

	DocumentResource documentResource = builder.authentication(
		"test@liferay.com", "learn"
	).build();

	System.out.println(
		new String(
			Base64.getDecoder(
			).decode(
				documentResource.getDocument(
					Long.valueOf(System.getProperty("documentId"))
				).getContentValue()
			)));
}

コードの大部分は Documents_POST_ToSites.javaのコードと似ています。 主な違いがいくつかあります。

次の行は、contentValueのネストフィールドをリクエストパラメータとして追加します。

builder.parameter("nestedFields", "contentValue");

IDでDocumentを取得した後、Base64.DecoderDocumentのコンテンツをデコードします。

Base64.Decoder decoder = Base64.getDecoder();

ドキュメントにパッチを適用する

DocumentのPATCHサービスは、Documentとそのフィールドを更新します。 次のcURLまたはJavaコマンドを実行して、Documentを更新できます。 1234DocumentのIDに置き換えてください。

ドキュメント_PATCH_ById.sh

コマンド:

./Documents_PATCH_ById.sh 1234

コード:

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/documents/${1}" \
	--form "document={\"description\": \"Bar\"}" \
	--form "file=@Document_POST_ToSite.sh" \
	--header "Content-Type: multipart/form-data; boundary=ARBITRARY" \
	--request "PATCH" \
	--user "test@liferay.com:learn"

最初のフォームデータ部分(-Fに続く)は、Documentdescriptionフィールドに新しい値を指定します。 2番目のフォームデータ部分は、アップロードする更新されたファイルを指定します。 両方必須ではないことに注意してください。 ファイルのみ、またはドキュメントのメタデータのみにパッチを適用できます。

Documents_PATCH_ById.java

コマンド:

java -classpath .:* -DdocumentId=1234 Documents_PATCH_ById

コード:

public static void main(String[] args) throws Exception {
	DocumentResource.Builder builder = DocumentResource.builder();

	DocumentResource documentResource = builder.authentication(
		"test@liferay.com", "learn"
	).build();

	System.out.println(
		documentResource.patchDocument(
			Long.valueOf(System.getProperty("documentId")),
			new Document() {
				{
					description = "Bar";
				}
			},
			new HashMap<String, File>() {
				{
					put("file", new File("Document_POST_ToSite.java"));
				}
			}));
}

上記のJavaコードは、DocumentResourcepatchDocumentメソッドを呼び出し、Document'のID、更新するフィールドを含むDocumentオブジェクト、およびアップロードする更新されたファイルを渡します。

上記のコマンドは、Documentの説明を"Bar"に更新します。

cURLコマンドは、ドキュメントの説明を変更しました。

ドキュメントを置き換える

DocumentのPUTサービスは、Documentとそのフィールドを完全に置き換えます。 次のcURLまたはJavaコマンドを実行して、Documentを置き換えることができます。 1234DocumentのIDに置き換えてください。

ドキュメント_PUT_ById.sh

コマンド:

./Documents_PUT_ById.sh 1234

コード:

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/documents/${1}" \
	--form "document={\"description\": \"Goo\", \"title\": \"Document_PUT_ById.sh\"}" \
	--form "file=@Document_PUT_ById.sh" \
	--header "Content-Type: multipart/form-data; boundary=ARBITRARY" \
	--request "PUT" \
	--user "test@liferay.com:learn"

最初のフォームデータ部分は、新しいdescriptiontitleフィールドの値を設定します。 2番目のフォームデータ部分は、アップロードする置換ファイルを指定します。

Documents_PUT_ById.java

コマンド:

java -classpath .:* -DdocumentId=1234 Documents_PUT_ById

コード:

public static void main(String[] args) throws Exception {
	DocumentResource.Builder builder = DocumentResource.builder();

	DocumentResource documentResource = builder.authentication(
		"test@liferay.com", "learn"
	).build();

	System.out.println(
		documentResource.putDocument(
			Long.valueOf(System.getProperty("documentId")),
			new Document() {
				{
					description = "Goo";
					title = "Documents_PUT_ById.java";
				}
			},
			new HashMap<String, File>() {
				{
					put("file", new File("Documents_PUT_ById.java"));
				}
			}));
}

上記の Java コードは、 DocumentResourceputDocument メソッドを呼び出し、 Documentの ID、 Document オブジェクト ( Document説明 フィールドと タイトル フィールドの値を含む)、およびアップロードする置換ファイルを渡します。

上記の cURL コマンドと Java クラスは、 Document インスタンスを、それぞれ新しいタイトル Documents_PUT_ById.shDocuments_PUT_ById.javaを持つ完全に新しいインスタンスに置き換え、説明は Goo.になります。

警告

現在の ドキュメントのタイトルを使用しない場合は、置換後の ドキュメントに必要な タイトル 値を必ず指定してください。

cURLコマンドがドキュメントを置き換えました。

ドキュメントを削除する

次のcURLまたはJavaコマンドを実行して、Documentを削除できます。 1234DocumentのIDに置き換えてください。

ドキュメント_DELETE_ById.sh

コマンド:

./Documents_DELETE_ById.sh 1234

コード:

curl \
	"http://localhost:8080/o/headless-delivery/v1.0/documents/${1}" \
	--request "DELETE" \
	--user "test@liferay.com:learn"

ドキュメント_DELETE_ById.java

コマンド

java -classpath .:* -DdocumentId=1234 Documents_DELETE_ById

コード:

public static void main(String[] args) throws Exception {
	DocumentResource.Builder builder = DocumentResource.builder();

	DocumentResource documentResource = builder.authentication(
		"test@liferay.com", "learn"
	).build();

	documentResource.deleteDocument(
		Long.valueOf(System.getProperty("documentId")));
}

Documentは、ドキュメントとメディアから削除されます。

その他のドキュメントおよびドキュメントフォルダサービス

次のcURLコマンドとJavaクラスは、その他のDocumentサービスとDocumentFolderサービスの詳細を示しています。

ファイル説明
Documents_POST_ToDocumentFolders.[java\|sh]ドキュメントをフォルダに投稿します。
DocumentFolders_GET_ById.[java\|sh]フォルダのフィールドを一覧表示します。
DocumentFolders_PATCH_ById.[java\|sh]フォルダとそのフィールドを更新します。
DocumentFolders_POST_ToSites.[java\|sh]ドキュメントフォルダをサイトに投稿します。
DocumentFolders_PUT_ById.[java\|sh]フォルダとそのフィールドを完全に置き換えます。
DocumentFolders_DELETE_ById.[java\|sh]ドキュメント フォルダーを削除します。
DocumentFolders_GET_FromSites.[java\|sh]サイトのフォルダを一覧表示します。

API エクスプローラー には、すべての Document および DocumentFolder サービスとスキーマが一覧表示され、各サービスを試すためのインターフェイスがあります。

DocumentResource および DocumentFolderResource Java インターフェースも参照してください。