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

経緯

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

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

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

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

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

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

  • StatusCode は 200
  • nextLink URL はなく、deltaLink URL がある
  • value に追加したユーザーの情報が入る

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

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

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

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

  • StatusCode は 200
  • nextLink URL はなく、deltaLink URL がある
  • value に削除したユーザーの情報が入る
    @removed.reasonchanged となっている

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

  • StatusCode は 200
  • nextLink URL はなく、deltaLink URL がある
  • value に削除したユーザーの情報が入る
    @removed.reasondeleted となっている

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

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

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

  • StatusCode は 200
  • nextLink URL はなく、deltaLink URL がある
  • value に登録・変更したユーザーの情報が入る

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

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

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

  • StatusCode は 200
  • nextLink URL はなく、deltaLink URL がある
  • value に登録・変更したユーザーの情報が入る

    ※今回の確認では 1 つの id で複数の情報が出力されることはなかった

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

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

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

  • StatusCode は 200
  • nextLink URL はなく、deltaLink URL がある
  • value に削除したユーザーの情報が入る

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

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

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

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

  • StatusCode は 200
  • nextLink URL はなく、deltaLink URL がある
  • value に追加したユーザーの情報が入る

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

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

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

  • StatusCode は 200
  • nextLink URL はなく、deltaLink URL がある
  • value に変更したユーザーの情報が入る

バッチリ仕様通り

$filter の制限確認

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

初回の Delta Query に $filter=companyName eq 'FLEQ' をつけてリクエストを送るとエラーが表示された

Request_UnsupportedQuery と表示されているが、クエリーの書き方が間違っている可能性はあるので、試しに id を引っ掛けてみる

通ったので、仕様通り id 以外では $filter はできなさそうである