Microsoft Graph で使える Delta Query をもう少し試してみる

[ブログからの転載](https://1bed.allright.life/?p=3540)

## 経緯

前回は Delta Query のドキュメントをななめ読みしたが、そこで気になった点もあるので色々と確認してみる

今回試すのは、Azure AD のユーザー変更の追跡

## 変更がない時のレスポンス

* StatusCode は 200
* nextLink URL はなく、deltaLink URL がある
* value に値はない

## 登録があった時のレスポンス

Azure AD にユーザーを 1 人追加した後に試行

* StatusCode は 200
* nextLink URL はなく、deltaLink URL がある
* value に追加したユーザーの情報が入る  
  ![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-04_13h15_05.png)

## 変更があった時のレスポンス

先に登録した**デルタクエリーテスト用**の部署を変更した後に試行

* StatusCode は 200
* nextLink URL はなく、deltaLink URL がある
* value に変更したユーザーの情報が入る
  内容は [登録があった時のレスポンス](#%E7%99%BB%E9%8C%B2%E3%81%8C%E3%81%82%E3%81%A3%E3%81%9F%E6%99%82%E3%81%AE%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9) と同じ

## 削除があった時のレスポンス

先に登録した**デルタクエリーテスト用**を削除
※削除されたユーザーには残っている状態

* StatusCode は 200
* nextLink URL はなく、deltaLink URL がある
* value に削除したユーザーの情報が入る  
  `@removed.reason` が `changed` となっている  
  ![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-04_13h37_04.png)

**デルタクエリーテスト用**を完全に削除
※削除されたユーザーからも削除

* StatusCode は 200
* nextLink URL はなく、deltaLink URL がある
* value に削除したユーザーの情報が入る  
  `@removed.reason` が `deleted` となっている  
  ![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-04_13h40_16.png)

## 登録後、変更があった時1

1. **デルタクエリーテスト用2** を作成
3. **デルタクエリーテスト用2** の役職を変更
3. **デルタクエリーテスト用2** の会社名を変更

上記手順を行った後に試行

* StatusCode は 200
* nextLink URL はなく、deltaLink URL がある
* value に登録・変更したユーザーの情報が入る  
  ![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-04_14h06_41.png)

## 登録後、変更があった時2

1. **デルタクエリーテスト用A** を作成
2. **デルタクエリーテスト用B** を作成
3. **デルタクエリーテスト用A** の役職を変更
3. **デルタクエリーテスト用B** の役職を変更
3. **デルタクエリーテスト用A** の会社名を変更
3. **デルタクエリーテスト用B** の会社名を変更

上記手順を行った後に試行

* StatusCode は 200
* nextLink URL はなく、deltaLink URL がある
* value に登録・変更したユーザーの情報が入る  
  ![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-04_14h43_12.png)  
  ※今回の確認では 1 つの id で複数の情報が出力されることはなかった

## 登録後、変更があって、削除があった時

1. **デルタクエリーテスト用A** を作成
2. **デルタクエリーテスト用A** の役職を変更
3. **デルタクエリーテスト用A** を完全削除

上記手順を行った後に試行

* StatusCode は 200
* nextLink URL はなく、deltaLink URL がある
* value に削除したユーザーの情報が入る  
  [![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-04_22h58_07.png)](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-04_22h58_07.png)

## 変更があった時 ($select を利用)

初回の Delta Query に `$select=displayName,companyName` をつけてリクエストを送ったときにレスポンス例

[![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-04_23h24_35.png)](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-04_23h24_35.png)

想定だと、ここで displayName と companyName 以外の値を更新しても差分として出力されないはず

**デルタクエリーテスト用A**を登録

* StatusCode は 200
* nextLink URL はなく、deltaLink URL がある
* value に追加したユーザーの情報が入る  
  ![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-04_23h32_19.png)

ここまでは想定通り  
次に、**デルタクエリーテスト用A**の役職名 (jobTitle) を変更

![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-04_23h45_31.png)

* StatusCode は 200
* nextLink URL はなく、deltaLink URL がある
* value に値はない  
  ※変更がないときと全く同じ

ここまで仕様通り  
次に、**デルタクエリーテスト用A**の会社名 (companyName) を変更

* StatusCode は 200
* nextLink URL はなく、deltaLink URL がある
* value に変更したユーザーの情報が入る  
  ![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-04_23h51_02.png)

バッチリ仕様通り

## $filter の制限確認

$filter は id 以外は追跡できないらしい

初回の Delta Query に `$filter=companyName eq 'FLEQ'` をつけてリクエストを送るとエラーが表示された
[![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-05_00h06_44.png)](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-05_00h06_44.png)

**Request_UnsupportedQuery** と表示されているが、クエリーの書き方が間違っている可能性はあるので、試しに id を引っ掛けてみる
[![](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-05_00h12_38.png)](https://1bed.allright.life/wp-content/uploads/2021/05/2021-05-05_00h12_38.png)
通ったので、仕様通り id 以外では $filter はできなさそうである