UiPath OrchestratorのAPIをSwaggerで簡単に試してみる

この記事ではUiPathのCloud Orchestratorを利用することを想定しています。

UiPath OrchestratorはAPIを使って情報の取得、更新、挿入、削除などの操作を実施することが可能です。
UiPath Orchestratorでは、APIが実際にどのように動作するものかを簡単に試すことができる Swagger という仕組みが用意されています。
この記事ではSwaggerを利用するための準備と、Swaggerの操作の基本について記載しています。

## 事前準備
9. https://cloud.uipath.com に管理者でログインし、 [管理] > [外部アプリケーション] を選択し、[アプリケーションを追加] をクリックします。
9. 任意のアプリケーション名を入力します。（今回は Swagger と入力）
9. アプリケーションの種類を以下から選択します。（今回は [機密アプリケーション] を選択）　
    | アプリケーションの種類 | 説明 |
    |:-:|:-:|
    | 機密アプリケーション | 付与方式として認可コードまたはクライアントクレデンシャルを使用する場合  |
    | 非機密アプリケーション | 付与方式として認可コード + PKCE を使用する場合 |
9. [スコープを追加] をクリックし、 リソースとして [Orchestrator API Access] を選択します。
9. スコープを選択します。(今回はアプリケーションスコープを選択)
    | スコープ | 説明 |
    |:-:|:-:|
    | アプリケーションスコープ | 付与方式としてクライアントクレデンシャルを使用する場合|
    | ユーザースコープ | 付与方式として認可コード + PKCE を使用する場合 |
9. 保護対象リソースに許可する操作をスコープとして選択します(複数選択可能)。今回は以下の3つを選択しました。各APIにはそれを呼び出すのに必要なスコープが決められています。スコープの確認方法については後述します。
    * OR.Folders.Read
    * OR.Jobs.Read
    * OR.Robots.Read
:::note warn
不要な権限の付加はセキュリティ上の懸念となりますので、必要最低限の権限を与えるようにしましょう
:::
9. リダイレクトURLは以下の値を設定（今回は設定不要）
    | 条件 | 設定値 |
    |:-:|:-:|
    | クライアントがWebアプリケーションの場合 | Identity Serverからの応答として認可コードが返されトークン取得の処理を行うためにコールバックされるURLを設定  |
    | スクリプトから認可コードを取得する場合  | Automation Cloud / Orchestrator など任意のURLを設定し、スクリプトから呼び出す際に同じ値を指定 |
    | クライアントクレデンシャル付与方式  | リダイレクトURLの設定は不要  |
9. [追加] をクリックし、アプリケーション設定を保存します。
9. ポップアップで表示されるアプリシークレットをメモします。アプリシークレットは再表示できないため、万が一紛失してしまった場合にはアプリケーションを編集し、 [新しく作成] をクリックして再生成してください。

:::note alert
アプリシークレットは重要なセキュリティ情報です。誰かに教えたり、複数人で共有したりしないようにしてください
:::

## ログイン
9. `https://cloud.uipath.com/アカウント名/テナント名/orchestrator_/swagger/index.html` にアクセスします。
9. 右上の[Authorize]をクリックします。
9. ポップアップ画面のclient_secretに事前準備手順でメモしたアプリシークレットの値を入力し、ポップアップ画面下部の[Authorize]をクリックします
9. 正しくLoginできると以下のような画面になりますので[Close]をクリックし、ポップアップ画面を閉じます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87645/0ef95670-4e2f-5e6f-1282-d5b54f1136f9.png)

## 実行例1.
9. Swagger画面からフォルダー一覧を取得してみます。[Folders]をクリックし、フォルダー関連のAPI一覧を表示します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87645/1cb15dda-c937-2e69-745d-080d2a4bfde3.png)

9. フォルダーの一覧取得は GET /odata/Folders ですので、それをクリックし展開します。
　この画面に、このAPIを呼び出すのに必要なスコープが **"OAuth Required scopes"** として表示されます。 
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87645/46dd1776-d765-b5ac-2a27-a3c67b979382.png)

9. APIコール時に各種パラメーターを指定できますが、まずはパラメーターを指定せずにAPIをコールしてみます。[Try it out]をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87645/940a3b19-f937-1f3a-ae07-9f21dae2ab92.png)

9. [Execute]ボタンが表示されますのでクリックします。
9. Response bodyに実行結果が表示されます。合わせてResponse headerや、Curlコマンドで同じ結果を得るためのコマンドなどが表示されます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87645/2b161707-5b65-b199-b451-23a476ed0591.png)

9. 次の手順のために適当なフォルダーのIdをメモしておきます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87645/ccf77545-df05-2c23-afd9-e6f604584bad.png)


## 実行例2.

9. パラメーターを利用する例として指定したフォルダ内のプロセス一覧を取得します。
9. Swagger画面の[Release] → [GET /odata/Releases] → [Try it out] の順にクリックし プロセス一覧取得の画面を展開します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87645/ac1cca76-1b05-4845-d5ad-9bf3f25fbebf.png)

9. X-UIPATH-OrganizationUnitId に 実行例1．でメモしたFolder Idを入力し、[Execute]をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87645/aa67f956-5d2d-577f-a6b6-8bcb0ec8cbe7.png)



9. 指定したフォルダ内のプロセス一覧を取得することができます。


## 実行例3.

9. パラメーターを利用する別の例として、API呼び出しでより多くの情報を取得する例をあげます。ここではJOBの実行履歴とともにそのJOBが実行されたRobotの情報も取得してみます。
9. JOBの実行履歴を取得するために使用する API は [GET /odata/Jobs] です。Swagger画面で Jobsをクリックしジョブの一覧取得の画面を展開します。
9. このままこのAPIを呼び出した場合、Robotの情報は取得できませんが、パラメータの $expand に Robot を指定することで Robot情報も同時に取得できます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87645/85b21989-d3cb-14c1-b5da-94af63b8497d.png)

9. 結果のJSONのにRobotの情報も含まれていることを確認してください。


## OrchestratorのAPIを調べる方法

Orchestratorの画面がどのAPIを使用してしているかを調べる方法です。これによって自分がOrchestratorに対して行いたい操作がどのAPIによって実現できるかを知ることができます。

9. ブラウザの開発者ツールを起動します。
    * Edgeの場合、F12を押したあとで、[Dev Toolを開く]をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87645/dc3795b7-925c-e67d-a577-36f8187f9567.png)
    *  Chromeの場合もF12を押して開発者ツールを起動します。
9. OrchestratorでAPIを確認したい画面に遷移します。
9. 開発者ツールでネットワークタブを選択し、クリアボタンを押します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87645/62328081-975a-0960-8084-c01c307561b8.png)
9. Orchestrator画面をリロードし、ログの先頭行を確認します。この例では GET processes APIが呼び出されていることが分かります。
9. 全般（Genetral）の要求URL(Request URL)に、呼び出されたAPIの情報が表示されます
    * Edge
    ![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87645/a3c66af0-a25d-2d01-5209-360e5c2c2b0d.png)
   * Chrome
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87645/3892f393-6601-53ba-3dfd-3500de0b3d08.png)


## まとめ

OrchestratorのAPIを利用することで、RobotやProcess、Packageの管理をより効率化することができます。
今回はAPIのお試しということでSwaggerを使ってみましたが、もちろんスクリプトやUiPathのワークフローからもAPIを呼び出すことができます。それらの方法については以下のUiPath Knowledge Baseの記事が役に立つと思います。こちらの記事もぜひ読んでみてください。
[外部アプリケーション機能(OAuth)によるOrchestrator APIコール実装方法](https://www.uipath.com/ja/community-blog/knowledge-base/implementing-orchestrator-api-with-oauth)