[Oracle Cloud]REST APIでOCM内のアセットを操作する

# はじめに

この記事は、以下のQiita記事の続きです。OCMのアセット・リポジトリに登録したデジタル・アセットおよびコンテンツ・アイテムを、REST APIで操作します

https://qiita.com/nakasato310/items/98b42cc34130fc2a672b

:::note info
この記事は2023年8月時点の情報に基づき作成しました。最新の情報については、製品ドキュメントなどをご確認ください
:::

# アセットの取得
## コンテンツ・アイテムの取得
アセット・リポジトリに登録されたコンテンツ・アイテムの情報を取得します。今回は以前の記事で登録済の`sampleNewsType`のコンテンツ・アイテムを**slug(スラグ)** を指定して取得します

利用するREST APIはこちら（↓）

https://docs.oracle.com/en/cloud/paas/content-cloud/rest-api-manage-content/op-management-api-v1.1-items-slug-slug-get.html


Postmanを起動し、以下の通りに設定します

- メソッド: **`GET`**
- URI: `https://<OCMインスタンスのドメイン名>/content/management/api/v1.1/items/.by.slug/{slug}`

:::note info
`slug（スラグ）`は、REST APIによるコンテンツ・アイテム作成時のレスポンスに含まれます。もしくは、WebブラウザでOCMインスタンスにアクセスし、アセット・リポジトリ内のコンテンツ・アイテムを開き、`プロパティ→一般→簡易URLスラグ`より確認できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/277d50d2-9985-3d52-9b59-d3a819351d38.png)
:::

**Authorization**タブ
- Type: **`OAuth2.0`** 
- Token: **取得済のOAuthトークンを指定**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/049d5b70-04b8-2495-c021-1c05776ff0fd.png)

**Headers**タブ
- Accept: **`application/json`**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/ae2838a6-73f4-139b-9888-447adbd12a8b.png)

**`Send`** をクリックします。REST APIが実行され、コンテンツ・アイテムの情報が取得できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/14b01263-60a1-46c8-d49e-f72268dde73f.png)

:::note info
コンテンツ・アイテムのIDを指定しても、同じ情報を取得できます
- [Read an Item](https://docs.oracle.com/en/cloud/paas/content-cloud/rest-api-manage-content/op-management-api-v1.1-items-id-get.html)
:::

## デジタル・アセットのオリジナル・ファイルの取得
アセット・リポジトリにデジタル・アセットとして登録された **オリジナルの画像ファイル** をダウンロードします。今回は以前の記事で登録済の`Image`タイプのデジタル・アセットを**slug(スラグ)** を指定して取得します

利用するREST APIはこちら（↓）

https://docs.oracle.com/en/cloud/paas/content-cloud/rest-api-manage-content/op-management-api-v1.1-assets-slug-slug-native-get.html

Postmanを以下の通りに設定します

- メソッド: **`GET`**
- URI: `https://<OCMインスタンスのドメイン名>/content/management/api/v1.1/assets/.by.slug/{slug}/native`

:::note info
`slug（スラグ）`は、REST APIによるデジタル・アセット登録時のレスポンスに含まれます。もしくは、WebブラウザでOCMインスタンスにアクセスし、アセット・リポジトリ内のデジタル・アセットを開き、`プロパティ→一般→簡易URLスラグ`より確認できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/d163221a-59bb-3130-cd96-78185e6a71e7.png)
:::

**Authorization**タブ
- Type: **`OAuth2.0`** 
- Token: **取得済のOAuthトークンを指定**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/049d5b70-04b8-2495-c021-1c05776ff0fd.png)

**`Send`** をクリックします。REST APIが実行され、デジタル・アセットとして登録したオリジナルの画像ファイルが取得できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/8548dceb-99fd-4ec6-3f4d-3b075489f267.png)

:::note info
デジタル・アセットのIDを指定しても、同じ情報を取得できます
- [Get Digital Item Native File](https://docs.oracle.com/en/cloud/paas/content-cloud/rest-api-manage-content/op-management-api-v1.1-assets-id-native-get.html)
:::


# アセットのステータス変更
## レビューに提出する
コンテンツ・アイテムを**レビューに提出(Submit for Review)** します。なお、リポジトリに登録直後のアセットのステータスは、**ドラフト(Draft)** に設定されます

利用するREST APIはこちら（↓）

https://docs.oracle.com/en/cloud/paas/content-cloud/rest-api-manage-content/op-management-api-v1.1-bulkitemsoperations-post.html

Postmanを以下の通りに設定します

- メソッド: **`POST`**
- URI: `https://<OCMインスタンスのドメイン名>/content/management/api/v1.1/bulkItemsOperations`

**Authorization**タブ
- Type: **`OAuth2.0`** 
- Token: **取得済のOAuthトークンを指定**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/6dbaa53a-4948-c283-3d24-8d92795691d5.png)

**Headers**タブ
- Content-Type: **`application/json`**
- X-Requested-With: **`XMLHttpRequest`**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/56b7d8dd-7fb6-f784-45b9-80ccbb891e98.png)

**Body**タブ
以下の入力例を参考に、json形式で入力します。なお、`id eq "xxxxxxx"`のxxxxxxxは、ステータスを変更するコンテンツ・アイテムの`id`の値を入力します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/20e7f95b-2816-b12c-0603-4fe5c32187a4.png)

```json:レビューに提出(Submit for Review)
{
  "q": "id eq \"COREAF4EC834C43F4593A9404B0BD06B7623\"",
  "operations": {
    "submitForApproval": {
      "value": "true"
    }
  }
}
```

**`Send`** をクリックします。REST APIが実行され、コンテンツ・アイテムのステータスが更新されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/71c9501c-efbb-2348-12e9-8a3544533e30.png)

WebブラウザでOCMインスタンスにアクセスし、コンテンツ・アイテムのステータスが **レビュー中** であることを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/e6695712-365a-6dab-53bf-c7feefc6d910.png)



## 承認する
レビュー中のステータスのコンテンツ・アイテムを **承認(Approve)** します。

利用するREST APIは[レビューに提出する](#レビューに提出する)と同じです

https://docs.oracle.com/en/cloud/paas/content-cloud/rest-api-manage-content/op-management-api-v1.1-bulkitemsoperations-post.html

Postmanを以下の通りに設定します

- メソッド: **`POST`**
- URI: `https://<OCMインスタンスのドメイン名>/content/management/api/v1.1/bulkItemsOperations`

**Authorization**タブ （※前の手順と同じ）
- Type: **`OAuth2.0`** 
- Token: **取得済のOAuthトークンを指定**

**Headers**タブ （※前の手順と同じ）
- Content-Type: **`application/json`**
- X-Requested-With: **`XMLHttpRequest`**

**Body**タブ
以下の入力例を参考に、json形式で入力します。なお、`id eq "xxxxxxx"`のxxxxxxxにはすでに登録済のコンテンツ・アイテムの`id`の値を入力します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/330df9fc-58bd-49a1-53e5-f9ce5a568be8.png)
```json:承認(Approve)
{
  "q": "id eq \"COREAF4EC834C43F4593A9404B0BD06B7623\"",
  "operations": {
    "approve": {
      "value": "true"
    }
  }
}
```

**`Send`** をクリックします。REST APIが実行され、コンテンツ・アイテムのステータスが**承認済** に変更されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/93b9267a-e22c-6d5c-5589-a526894e2086.png)


WebブラウザでOCMインスタンスにアクセスし、コンテンツ・アイテムが **承認済** であることを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/f5fa9db5-90d1-f954-e950-a51111cf234b.png)

:::note info
アセットを **却下(Reject)** する場合は、`value`に**false**を設定し、同じREST APIを実行します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/68642d66-4bf3-21b2-5063-526aa7719391.png)
:::


# アセットの公開
コンテンツ・アイテムを公開します。今回は **今すぐ公開(Publish Now)** を実行します。利用するREST APIは[レビューに提出する](#レビューに提出する)、[承認する](#承認する)と同じです

Postmanを以下の通りに設定します

- メソッド: **`POST`**
- URI: `https://<OCMインスタンスのドメイン名>/content/management/api/v1.1/bulkItemsOperations`

**Authorization**タブ （※前の手順と同じ）
- Type: **`OAuth2.0`** 
- Token: **取得済のOAuthトークンを指定**

**Headers**タブ
- Content-Type: **`application/json`**
- X-Requested-With: **`XMLHttpRequest`**
- Prefer: **`respond-async`**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/94ded166-598c-2904-1853-f0830377e65f.png)

**Body**タブ
以下の入力例を参考に、json形式で入力します。なお、`id eq "xxxxxxx"`のxxxxxxxにはすでに登録済のコンテンツ・アイテムの`id`の値を入力します。また、`operations > publish > channels > id`には、アセット公開先の公開チャネルの`チャネルID`を設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/7928949c-3517-642d-f295-d0c060d80fe2.png)

```json:今すぐ公開(Publish Now)
{
  "q": "id eq \"COREAF4EC834C43F4593A9404B0BD06B7623\"",
  "operations": {
    "publish"{
        "channels": [
            {
                "id": "RCHANNEL8ACFC2F627524E178BB64FA6C578243E"
            }
        ]
    }
  }
}
```

:::note info
公開チャネルのチャネルIDは以下の手順で確認できます
- リポジトリ管理者ロール(CECRepositoryAdministrator)を付与されたユーザーでOCMにサイン・インする
- `ADMINISTRATION:コンテンツ→チャネルのパブリッシュ`から該当する公開チャネルを開きます
- 右サイド・パネルを開き、`プロパティ→APIタブ`より確認できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/daecaf74-ca10-ef63-9ef6-03612e3b752f.png)
:::

**`Send`** をクリックします。REST APIが実行され、コンテンツ・アイテムの公開ジョブが実行されます(202 Accepted)。公開ジョブのステータスは、レスポンスのヘッダー(Headers)に含まれる `Location` のURLより確認できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/8da641ef-ad1d-5c1c-9a59-db18684985de.png)

しばらくしてから、`Location`のURLをRESTクライアントから実行します。`progress:`が**succeeded**(成功)であることを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/31dff28e-fa1d-47ec-1e98-8f6382740d64.png)

WebブラウザでOCMインスタンスにアクセスし、コンテンツ・アイテムが **公開済** であることを確認します。また、コンテンツ・アイテムに関連づけられた画像アセットも併せて公開されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/97c9aaf3-2333-f482-9399-a7214cce14e3.png)

:::note info
公開の取消(Unpublish)を実行する場合は、`operations`で**unpublish**を指定し、公開の取消を実行するアセットIDと公開チャネルのチャネルIDを指定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/e115fe89-9ee0-6d40-f398-a74954689daf.png)
:::




# まとめ

この記事では、OCMの[REST API for Content Management](https://docs.oracle.com/en/cloud/paas/content-cloud/rest-api-manage-content/index.html)を利用し、REST API経由でアセットを操作する方法を紹介しました。

## （参考）OCMの製品ドキュメント

- [Oracle Content Management 製品ドキュメント(英語)](https://docs.oracle.com/en/cloud/paas/content-cloud/books.html)
- [Oracle Content Management 製品ドキュメント（日本語翻訳版）](https://docs.oracle.com/cd/E83857_01/paas/content-cloud/books.html)  
    `製品ドキュメントの英語原本と日本語翻訳版です。翻訳されるまでに時差がありますので、最新情報の確認は 英語版のドキュメントをご利用ください`