【UiPath】Orchestrator APIで取得したJSONデータの操作方法【GET編】

## 概要
Orchestrator APIで取得したJSONデータの操作方法についてご説明します。
注：私の投稿する内容は個人の見解であり、所属団体を代表するものではありません。

## はじめに
今回はUiPath Studioから『OrchestratorへのHTTP要求』アクティビティを利用して取得したJSONデータを操作する方法についてご説明します。

## Orchestrator APIとは？

UiPath Orchestrator APIは、UiPathのOrchestratorの機能にプログラムからアクセスできるようにするRESTful APIです。これにより、開発者はOrchestratorの操作をコードで自動化したり、外部システムと統合したりすることができます。

### 参考：Orchestrator APIでできること

<details><summary>以下をクリックください。</summary>

<b>ロボット管理</b>

- ロボットの削除、状態確認。

<b>ジョブ管理</b>
- ジョブの開始、停止、ステータス確認。

<b>アセットとキューの操作</b>

- アセットの取得、追加。
- キューのアイテム取得、削除。

<b>プロセス管理</b>
- プロセスの取得、更新、削除。
- パッケージのアップロード。

<b>監査とログの取得</b>
- ログデータの取得。

<b>ユーザーと権限管理</b>
- ユーザーアカウントの作成、管理。
- ロールと権限の設定。

<b>アラート管理</b>
- アラートの取得。

</details>

## JSONデータとは?
JSON（JavaScript Object Notation）は、データを軽量かつ簡潔に表現するためのフォーマットです。プログラム間でデータを交換する際に広く使用されており、人間にも読みやすく、機械でも簡単に解析できる構造を持っています。UiPathではJSONデータを操作するためのアクティビティが提供されております。

## JSONデータの操作方法
UiPath Studioから『OrchestratorへのHTTP要求』アクティビティを利用して取得したAlert関連のJSONデータを操作する方法についてご説明します。
### Step1.『OrchestratorへのHTTP要求』アクティビティの設定

StudioをOrchestratorに接続後、『OrchestratorへのHTTP要求』アクティビティの[エンドポイントの相対パス]に以下の通り記載します。
```
"odata/Alerts?$top=3"
```
::: note
?$top=3は取得したアラート情報の中から最新の3件を取得することを意味します。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/14d5078c-6298-283d-489d-1daa0fa8013b.png)
アクティビティの出力プロパティにはそれぞれ以下の出力変数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/756c228f-7837-2920-1abf-0ca45cfb0576.png)

GET odata/Alertsの情報は公式ガイドにも記載があります。
https://docs.uipath.com/ja/orchestrator/automation-cloud/latest/api-guide/alerts-requests

### Step2.レスポンスヘッダーの中身を取得
レスポンスヘッダーの中身は『繰り返し(コレクションの各要素)』アクティビティを利用して取得が可能です。
引数の型に`System.Collections.Generic.KeyValuePair＜System.String,System.String＞`を指定すると、項目名に`currentKeyValuePairOfTextAndText`が自動生成されます。『繰り返し(コレクションの各要素)』アクティビティの次のコレクションの各要素に`ResponseHeaders`を、
本文に『メッセージをログ』アクティビティでメッセージに`currentKeyValuePairOfTextAndText`と入力するとレスポンスヘッダーのそれぞれの値が取得できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/e922a3ea-3606-f69e-1276-3b79f906e86a.png)

#### 参考：取得したレスポンスヘッダーの値とその意味
<details><summary>例は以下となります。</summary>


基本情報
<b>Date</b> 
サーバーがレスポンスを生成した日時。
値: Wed, 04 Dec 2024 04:35:26 GMT
意味: サーバーの処理タイミングを示します。

<b>Connection</b>
クライアントとの接続の管理方法。
値: keep-alive
意味: 接続を維持し、次のリクエストで再利用可能であることを示します。

キャッシュ関連
<b>Cache-Control</b>
キャッシュの動作を制御。
値: no-store
意味: このレスポンスをキャッシュに保存しないよう指示します。

<b>Pragma</b>
HTTP/1.0のキャッシュ制御。
値: no-cache
意味: 中継プロキシにキャッシュしないよう指示します。

セッションとCookie
<b>Set-Cookie</b>
サーバーがクライアントにCookieを送信。
値: __cf_bm=SPGLDOFhHOLk...
意味: セッション管理やセキュリティ目的のCookie設定（HttpOnly, Secure属性で保護されています）。

リクエストトラッキング
<b>Request-Context</b>
アプリケーション固有のコンテキスト情報。
値: appId=cid-v1:354c7cb9-ae5a-4d16-84a7-f13242bbac6d
意味: アプリケーションまたはサービスの識別子。

<b>X-Correlation-ID</b>
リクエスト間のトラッキングID。
値: 0e0372fd-b706-45cf-86a3-60e8edd538e9
意味: 複数リクエストを追跡するための一意の識別子。

<b>X-UiPath-Correlation-ID</b>
UiPath固有のトラッキングID。
値: undefined
意味: API呼び出しを追跡するための識別子（今回は未定義）。

セキュリティ関連
<b>X-Robots-Tag</b>
検索エンジンによるインデックス化の制御。
値: noindex,nofollow
意味: このページを検索エンジンにインデックスさせない。

<b>X-Download-Options</b>
ファイルダウンロード時のセキュリティ。
値: noopen
意味: Internet Explorerでのダウンロード時にスクリプト実行を防止。

<b>X-XSS-Protection</b>
クロスサイトスクリプティング（XSS）対策。
値: 1
意味: XSSフィルターを有効化。

<b>X-Content-Type-Options</b>
MIMEタイプのスニッフィング防止。
値: nosniff
意味: ブラウザがレスポンスのMIMEタイプを変更しないよう指示。

<b>X-Frame-Options</b>
クリックジャッキング対策。
値: SameOrigin
意味: 同じオリジンからのフレーム埋め込みのみ許可。

<b>Strict-Transport-Security</b>
HTTPS通信の強制。
値: max-age=15724800; includeSubDomains
意味: HTTPS通信を6か月間（15724800秒）強制。サブドメインも対象。

<b>Content-Security-Policy</b>
外部リソースの読み込み制御。
意味: スクリプト、スタイルシート、画像、フォントなどの読み込み元を制限。セキュリティ向上。

API関連
<b>odata-version</b>
ODataのバージョン情報。
値: 4.0
意味: APIがODataバージョン4.0に準拠していることを示す。

<b>api-supported-versions</b>
サポートされているAPIバージョン。
値: 18.0
意味: このAPIはバージョン18.0に対応している。

レート制限
<b>RateLimit-Policy</b>
レート制限のポリシー。
値: 450000;w=300
意味: 300秒間（5分間）に450,000リクエスト可能。

<b>RateLimit-Remaining</b>
残りリクエスト数。
値: 449998
意味: 現在の時間枠であと449,998回のリクエストが可能。

<b>RateLimit-Limit</b>
最大リクエスト数。
値: 450000
意味: 1時間あたりのリクエスト上限。

ネットワークとキャッシュ
<b>Server</b>
使用しているサーバーソフトウェア。
値: cloudflare
意味: このレスポンスを提供したサーバーがCloudflareであることを示す。

<b>CF-Cache-Status</b>
Cloudflareのキャッシュステータス。
値: DYNAMIC
意味: キャッシュされていない動的リクエスト。

<b>CF-RAY</b>
CloudflareリクエストのトラッキングID。
値: 8ec916f51d98d77b-NRT
意味: リクエストを一意に識別するID（NRTは東京データセンターを表す）。　
</details>

### Step3. JSONの逆シリアル化

『JSONを逆シリアル化』アクティビティは、JSON形式の文字列をJSONオブジェクトに変換するためのアクティビティです。JSONオブジェクトとして扱うことでデータ操作が文字列よりも簡単になります。

::: note
例：ループによる特定のフィールド値の取得はJSONオブジェクトで簡単に行えます。
::: 

『JSONを逆シリアル化』アクティビティで出力したJSONオブジェクトに`DeserializedJsonObject`と記載します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/ddafc416-523b-517a-acad-d897d709004a.png)

『メッセージをログ』アクティビティで`DeserializedJsonObject`を出力すると、データが出力されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/b5f17766-8ba6-0012-6f3d-8d5e8f283963.png)

### Step4. JSONオブジェクトの子要素の取り出し

以下の『繰り返し（コレクションの各要素）』アクティビティでは、JSONオブジェクトの子要素にアクセスすることを示しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/d5bdfa1f-c078-c6ce-cba1-36f41ab9b796.png)

具体的には、`DeserializedJsonObject("value")` は、`DeserializedJsonObject`の`"value"`のフィールドに格納されている値を返します。

`.Children` は、指定したフィールドが配列形式になっている場合、それらをリストとして返します。

『繰り返し（コレクションの各要素）』の本文に『メッセージをログ』で`CurrentJToken("id").ToString`で指定することでメッセージが出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/81b89671-db2c-d6e8-0dba-302bca9d3880.png)

::: note
※Step1で3件のアラートの情報を取得したので3件のIDが出力されます。
:::
同様に『メッセージをログ』で`CurrentJToken("data").ToString`で指定することで3件のアラートのdataが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/909d5aff-c568-9607-bffb-d15dddca8fb1.png)

::: note
`DeserializedJsonObject`内で出力したデータに記載されている内容："id"、"notificationName"、"data"等はこの方法で取得できます。
:::

## おわりに
今回はOrchestratorのGETメソッドで取得したJSONデータの操作方法をご案内しました。POSTメソッドについては弊社の別の社員が作成予定です。