Azure Purview : REST API を利用する

今回は [チュートリアル:REST API を使用する](https://docs.microsoft.com/ja-jp/azure/purview/tutorial-using-rest-apis) 参考に REST API アクセスを見ていきます。ただしチュートリアルは API の内容についての詳細はないため、この記事では実際のカタログを検索する方法を紹介します。

# REST API

他の多くのサービス同様、Azure Purview も REST API をサポートしており、プログラムからカタログ情報に対してアクセスが行えます。

# サービスプリンシパルの作成と権限の付与

REST API で Purview にアクセスする際に利用するサービスプリンシパルを作成し、権限を設定していきます。

1\. Azure ポータルより「Azure Active Directory」を選択し、「アプリの登録」より「新規登録」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/069b68b4-2c57-4784-e7ab-875ad12dddae.png)

2\. 任意の名前を付与。他の設定は既定のまま「登録」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/a427da4c-02d6-1856-4440-fdeb0c5e6fb9.png)

3\.「概要」で「アプリケーション ID」と「テナント ID」を確認。後程利用するためコピーしておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/8bcfdd6e-e169-d137-b695-5e284fba038b.png)

4\.「証明書とシークレット」より「新しいクライアント シークレット」をクリック。任意の有効期間を選んで「追加」をクリック。発行されたキーをコピーしておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/9548b41c-e27f-a6af-a27e-628999456482.png)

5\. Azure Purview リソースに移動し、「アクセス制御 (IAM)」より「追加」を選択し、「ロールの割り当ての追加」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/332639fa-9508-6fd2-f833-200d7a281dea.png)

6\. 作成したサービスプリンシパルに「Purview Data Curator」ロールを付与。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/84893e91-449d-663f-a00e-2fd656e78a68.png)

# アクセストークンの取得

通常の Azure AD を利用した OAuth 2.0 認証です。C# などプログラム言語を利用する場合は MSAL を使ってアクセストークンを取得できます。ここでは Postman を使った手順を紹介します。

1\. Postman を起動して、以下のように設定。テナント ID、クライアント ID、シークレットは上記で取得したものを利用。

HTTP メソッド: POST
アドレス: https://login.microsoftonline.com/<テナント ID>/oauth2/token
Body: x-www-form-urlencoded 
キーと値: 以下画面ショットの通り
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/4611c37c-bae9-ec82-3823-66fddaf56965.png)

2\.「Send」をクリックし、結果からアクセストークンを取得。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/27862513-2e6f-45a9-7164-850649e9cc30.png)

# 検索の実行

[REST API ドキュメントを参照する](https://docs.microsoft.com/ja-jp/azure/purview/tutorial-using-rest-apis#view-the-rest-apis-documentation) の手順で Open API のドキュメントを確認します。いくつかエンドポイントがありますが、今回は検索と資産の参照を行います。

**[API ドキュメント]**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/ae3882f7-a978-f24f-041c-28e3485edcfd.png)

また Azure Purview の REST エンドポイントは Azure ポータルより、Purview アカウントのプロパティ画面で確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/885b0621-ce19-7b2a-82a6-84f60aea6771.png)

## キーワードのみでの検索

まずは search/advanced エンドポイントに対して、キーワードのみで検索してみます。

1\. Postman でアドレスとヘッダーに以下を設定。

HTTP メソッド: POST
アドレス: https://\<Purview アカウント名>.catalog.purview.azure.com/api/atlas/v2/search/advanced
Headers: キーに Authorization、値に「Bearer 取得したアクセストークン」
※Bearer とアクセストークンの間に半角スペースが必要
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/6d6dc6e6-a586-4788-f9d4-c73aab25dd06.png)

2\. Body で以下を設定。
種類: raw で JSON を選択
値: 以下 JSON を設定

```json
{
    "keywords":"contoso"
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/10ecf85b-eae5-7d6a-e1aa-e7b08179efbf.png)

3\.「Send」をクリックして結果を確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/51198724-1541-cae4-b8fa-8c3b4469e6fc.png)

複数の結果が返ってきますが、期待していた資産の結果だけではなく、用語も含めた検索結果となっています。画面ショットは以下の用語が検索に出ています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/ba193b62-8ac7-7bd5-a446-6ae926f406a2.png)

## ファセットの追加

次に Azure Purview Studio の検索結果の左側に出るようなファセットも取得してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/e9f9932d-bf34-37c6-b684-b9f929b9766c.png)

1\. Postman の Body に facets を追加。

```json
{
    "keywords":"contoso",
    "facets": [
        {
            "facet": "assetType",
            "count": 0,
            "sort": {
                "count": "desc"
            }
        },
        {
            "facet": "classification",
            "count": 10,
            "sort": {
                "count": "desc"
            }
        },
        {
            "facet": "contactId",
            "count": 10,
            "sort": {
                "count": "desc"
            }
        },
        {
            "facet": "label",
            "count": 10,
            "sort": {
                "count": "desc"
            }
        },
        {
            "facet": "term",
            "count": 10,
            "sort": {
                "count": "desc"
            }
        },
        {
            "facet": "classificationCategory",
            "count": 0,
            "sort": {
                "count": "desc"
            }
        },
        {
            "facet": "fileExtension",
            "count": 0,
            "sort": {
                "count": "desc"
            }
        }
    ]
}
```
2\.「Send」をクリックして結果を確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/07e5e027-7b7c-cc1e-fa77-8056d9f1ca3d.png)

Azure Purview Studio と同じように、分類や資産の種類などが検索結果と共に取得できることを確認します。

## フィルターを追加して検索

現在は用語も含めた結果が取得されるため、資産のみ取得できるようフィルターを追加します。

1\. Postman の Body に filter を追加。

```json
{
    "keywords": "contoso",
    "filter": {
        "and": [
            {
                "not": {
                    "or": [
                        {
                            "attributeName": "size",
                            "operator": "eq",
                            "attributeValue": 0
                        },
                        {
                            "attributeName": "fileSize",
                            "operator": "eq",
                            "attributeValue": 0
                        }
                    ]
                }
            },
            {
                "not": {
                    "classification": "MICROSOFT.SYSTEM.TEMP_FILE"
                }
            },
            {
                "not": {
                    "or": [
                        {
                            "entityType": "AtlasGlossaryTerm"
                        },
                        {
                            "entityType": "AtlasGlossary"
                        }
                    ]
                }
            }
        ]
    },
    "facets": [
        {
            "facet": "assetType",
            "count": 0,
            "sort": {
                "count": "desc"
            }
        },
        {
            "facet": "classification",
            "count": 10,
            "sort": {
                "count": "desc"
            }
        },
        {
            "facet": "contactId",
            "count": 10,
            "sort": {
                "count": "desc"
            }
        },
        {
            "facet": "label",
            "count": 10,
            "sort": {
                "count": "desc"
            }
        },
        {
            "facet": "term",
            "count": 10,
            "sort": {
                "count": "desc"
            }
        },
        {
            "facet": "classificationCategory",
            "count": 0,
            "sort": {
                "count": "desc"
            }
        },
        {
            "facet": "fileExtension",
            "count": 0,
            "sort": {
                "count": "desc"
            }
        }
    ]
}
```

2\.「Send」を実行して結果を確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/b249682a-bcfb-5132-1678-cf1244828c97.png)

資産のみが表示されていることを確認します。まだ不要なものが出ている場合は、フィルター条件を追加してさらに絞ってください。

# 資産の確認

続いて検索結果より資産の詳細を確認してみます。

1\. Postman でアドレスとヘッダーに以下を設定。資産の guid は検索結果から任意のものを利用。

HTTP メソッド: GET
アドレス: https://\<Purview アカウント名>.catalog.purview.azure.com/api/atlas/v2/entity/guid/\<資産の guid>
Headers: キーに Authorization、値に「Bearer 取得したアクセストークン」
※Bearer とアクセストークンの間に半角スペースが必要
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214116/f2a83fb9-8925-104c-2363-d4f0b6c52c9a.png)

2\.「Send」をクリックして結果を確認。

資産によってはスキーマや分類などを含んだ数多くの情報が表示されます。また手動で設定した連絡先などの情報も表示されることを確認してください。

# その他のエンドポイント

Open API のドキュメントを見る限りでは、系列や分類などを個別に取得することもできますし、データの登録なども行えます。

ただしスキャンの手動トリガーなどの API は私が見た限りでは見つけられませんでした。発見した方は是非教えてください。

[前の記事へ](https://qiita.com/kenakamu/items/6d9e02dbfc5cc2960076)