長時間実行されるアクションの処理

この記事では、Microsoft Graph API を使用するときに実行時間の長いアクションを操作する方法について説明します。 一部の API 応答では、完了するまでに不確定な時間が必要です。 応答を返す前にアクションが完了するまで待たずに、Microsoft Graph では実行時間の長いアクション パターンを使用する場合があります。 このパターンにより、実行時間の長いアクションで状態の更新をポーリングする方法がアプリに提供されます。要求はアクションの完了を待機しません。

一般的なパターンには、次の手順が含まれます。

  1. アプリは、API を介して実行時間の長いアクションを要求します。 API はアクションを受け入れ、アクション状態レポートを202 AcceptedLocation取得するための API URL のヘッダーと共に応答を返します。
  2. アプリはアクション状態レポート URL を要求し、実行時間の長いアクションの進行状況を示す asyncJobStatus 応答を受け取ります。
  3. 実行時間の長いアクションが完了します。
  4. アプリは、アクションの状態レポート URL を再度要求し、アクションの完了を示す asyncJobStatus 応答を受け取ります。

前提条件

実行時間の長いアクションの状態を照会するには、実行時間の長いアクションを実行するために必要なのと同じ アクセス許可 も必要です。

最初のアクション要求

次の例では、 driveitem: copy メソッドを使用します。 このシナリオでは、アプリが大量のデータを含むフォルダーをコピーするように要求します。 データ量が多いため、この要求が完了するまでに数秒かかる可能性があります。

POST https://graph.microsoft.com/beta/me/drive/items/{folder-item-id}/copy
Content-Type: application/json

{
  "parentReference": {
    "path": "/drive/root:/Documents"
  },
  "name": "Copy of LargeFolder1"
}

API は、アクションが受け入れられたことを応答し、実行時間の長いアクションの状態を取得する URL を提供します。

HTTP/1.1 202 Accepted
Location: https://api.onedrive.com/monitor/4A3407B5-88FC-4504-8B21-0AABD3412717

メモ: 返される場所 URL が Microsoft Graph API エンドポイントにない可能性があります。

多くの場合、この手順は要求の終わりです。これは、コピー アクションがアプリの他の作業なしで完了するためです。 ただし、アプリでコピー アクションの状態を表示する必要がある場合、またはエラーなしで完了したことを確認する必要がある場合は、モニター URL を使用して実行できます。

モニター URL から状態レポートを取得する

コピー アクションの状態を確認するために、アプリは前の応答で提供された URL に要求を行います。

メモ: URL は有効期間が短く、元の呼び出し元に固有であるため、この要求では認証は必要ありません。

GET https://api.onedrive.com/monitor/4A3407B5-88FC-4504-8B21-0AABD3412717

サービスは、実行時間の長いアクションがまだ進行中であるという情報で応答します。

HTTP/1.1 202 Accepted
Content-type: application/json

{
  "operation": "ItemCopy",
  "percentageComplete": 27.8,
  "status": "inProgress"
}

この情報は、コピー アクションの進行状況に関する最新情報をユーザーに提供するために使用できます。 アプリは、ステータスの最新情報を要求してアクションの進行状況を追跡するために、モニター URL へのポーリングを継続できます。

モニター URL から完了状態レポートを取得する

数秒後、コピー操作が完了します。 今回、アプリがモニター URL に対して要求を行うと、応答はアクションの完了した結果へのリダイレクトになります。

GET https://api.onedrive.com/monitor/4A3407B5-88FC-4504-8B21-0AABD3412717

アクションが完了すると、モニター サービスからの応答によって結果のリソース ID が返されます。

HTTP/1.1 202 Accepted
Content-type: application/json

{
    "percentageComplete": 100.0,
    "resourceId": "01MOWKYVJML57KN2ANMBA3JZJS2MBGC7KM",
    "status": "completed"
}

完了した操作の結果を取得する

ジョブが完了すると、モニター URL は結果のリソース ID を返します。 この場合は、元のアイテムの新しいコピーです。 次の例は、リソース ID を使用してこの新しい項目に対処する方法を示しています。

GET https://graph.microsoft.com/beta/me/drive/items/{item-id}
HTTP/1.1 200 OK
Content-type: application/json

{
    "id": "",
    "name": "Copy of LargeFolder1",
    "folder": { },
    "size": 12019
}

サポートされているリソース

実行時間の長いアクションは、次のメソッドでサポートされています。

Resource API
driveItem コピー