Oracle Analytics Cloud：REST APIによるシステム設定の管理

# はじめに
Oracle Analytics Cloud（**OAC**）に対して、REST APIを使用してできることが徐々に増えてきています。
今回は、コンソールメニューのシステム設定の値をWeb UIの代わりにREST APIで取得したり更新したりする方法を紹介します。

# 1. 機密アプリケーションの作成
OCI管理コンソールでドメインの詳細を開き、「統合アプリケーション」タブを表示します。
「アプリケーションの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/02cc6bc3-6b31-ad1f-8e65-b51e8bc3c2c7.png)

「機密アプリケーション」を選択し、「ワークフローの起動」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/1b2a8156-668d-12c6-6a15-9b619b0b09a7.png)

名前と説明を入力し、下にスクロールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/1ad940fd-7fee-8f33-c472-ba576c3fb755.png)

クライアント構成セクションで、「このアプリケーションをクライアントとして今すぐ構成します」を選択します。
認可タイプとして「リソース所有者」を選択し、さらに下にスクロールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/50656dea-cdfe-3d6d-935c-72bede5145b7.png)

トークン発行ポリシーセクションで、「リソースの追加」を選択し「スコープの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/a853f5e0-b5d3-030c-e37c-a55dd3849b88.png)

対象となるOACインスタンスを選択し「追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/1f7252fb-092d-6e63-152e-8122b9add9b0.png)

リソースが追加されたことを確認して、「スコープ」をコピーしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/1a21a717-af7c-327b-3b6b-a7381f8b58c4.png)

「次」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/ca9259bb-7583-826a-3320-9643aa648574.png)

「終了」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/126535cf-2ce4-28d9-bb2a-04615ec66fcc.png)

「アクティブ化」をクリックして、作成した機密アプリケーションをアクティブにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/a2c27575-4548-8b46-91a4-f02dfc7f2ec8.png)

「OAuth構成」セクションのクライアントIDとクライアント・シークレットをコピーしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/4cad1f0a-7e68-2808-5f05-b638ca282121.png)

# 2. トークンの取得
## 2.1 資格情報をBase64でエンコードする
コピーしておいたクライアントIDとクライアント・シークレットが次の値の場合

- クライアントID: xxxxxxxxxx
- クライアント・シークレット: zzzzzzzzzz

2つを連結して「xxxxxxxxxx:zzzzzzzzzz」という文字列を作り、これをBase64でエンコードします。
こんな感じになります。これをコピーしておきます。
- eHh4eHh4eHh4eDp6enp6enp6enp6

## 2.2 OACインスタンスの情報を取得する
OCI管理コンソールで対象のOACインスタンスの詳細画面に移動し、「追加情報」タブを表示します。
ドメインURLとホスト名をコピーしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/fa7b1865-aca2-ca3c-aef2-7311cd7b8773.png)

## 2.3 トークンを取得する
コピーしておいた
- ドメインURL
- 資格情報をBase64エンコードしたもの
- 機密アプリケーションのリソースのスコープ

を使用してcurlコマンドを実行します。
今回は、curlの実行環境としてCloud Shellを使用しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/2b0146c9-9173-8801-336d-d87fc17bfd2c.png)

次のコマンドを実行します。

```shell
curl --request POST \
--url https://<ドメインURL>/oauth2/v1/token \
--header 'authorization: Basic <資格情報をBase64エンコードしたもの>' \
--header 'content-type: application/x-www-form-urlencoded;charset=UTF-8' \
-d 'grant_type=password&username=<ユーザー名>&password=<パスワード>&scope=<機密アプリケーションのリソースのスコープ>'
```
access_tokenとして返ってきた値をコピーしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/81857852-f896-98d5-5474-d93a9b029305.png)

# 3. システム設定の管理
## 3.1 キャッシュ有効化の設定を取得
システム設定のキャッシュの有効化に関する値を取得してみます。
OACインスタンスの情報を取得した際にコピーしておいた「ホスト名」を使います。
また、先程のアクセストークンもコピーして使用します。

```shell
curl -i --header "Authorization: Bearer <access_token>" \
--request GET https://<ホスト名>/api/20210901/system/settings?key=EnableDataQueryCache
```

戻り値はこんな感じになります。

```shell
HTTP/1.1 200 OK
Date: Fri, 12 Jan 2024 00:32:01 GMT
Content-Type: application/json
Content-Length: 102
Connection: keep-alive
X-ORACLE-DMS-ECID: dac20284-1fb2-47e1-b485-578876cc6131-00011e41
X-ORACLE-DMS-RID: 0
Strict-Transport-Security: max-age=31536000;
vary: Accept-Encoding,X-Forwarded-Proto,origin

{"items":[{"key":"EnableDataQueryCache","value":"true","displayName":"Cache Enable","pending":false}]}
```

WebのUIで確認すると、こうなっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/8c505ca4-2c26-8145-d3e4-4482f34d71a3.png)

## 3.2 キャッシュ有効化の設定を変更する
jsonファイルを作ります。

```json:update_system_settings.json
{
     "items":[               
       {                   
         "key": "EnableDataQueryCache",
         "value": "false"
       }
     ]
}
```

次のコマンドを実行します。
```shell
curl -i --header "Authorization: Bearer <access_token>" \
--header "Content-Type: application/json" \
--request PUT https://<ホスト名>/api/20210901/system/settings \
--data @update_system_settings.json
```

戻り値です。
```shell
HTTP/1.1 202 Accepted
Date: Fri, 12 Jan 2024 00:36:47 GMT
Content-Length: 0
Connection: keep-alive
X-ORACLE-DMS-ECID: b7e414cf-8c5d-4ba8-86fb-7f431e5639a4-0000f080
X-ORACLE-DMS-RID: 0
Strict-Transport-Security: max-age=31536000;
vary: X-Forwarded-Proto,origin
```

もう一度、Cache Enableの値を取得してみた結果です。
```shell
HTTP/1.1 200 OK
Date: Fri, 12 Jan 2024 00:37:05 GMT
Content-Type: application/json
Content-Length: 102
Connection: keep-alive
X-ORACLE-DMS-ECID: dac20284-1fb2-47e1-b485-578876cc6131-00011ef5
X-ORACLE-DMS-RID: 0
Strict-Transport-Security: max-age=31536000;
vary: Accept-Encoding,X-Forwarded-Proto,origin

{"items":[{"key":"EnableDataQueryCache","value":"false","displayName":"Cache Enable","pending":true}]}
```

Web UIでも確認してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/052067c0-bb4a-8f46-27d3-87d3e3ababc0.png)

# 公式ドキュメント

https://docs.oracle.com/en/cloud/paas/analytics-cloud/acapi/index.html