Microsoft Graph の List API と Drive API を相互変換する
はじめに
Microsoft Graph の Drive API では SharePoint のサイト構造を意識することなく、SharePoint や OneDrive for Business のファイルを扱うことができます。しかし Drive API の Drive
や DriveItem
の ID は SharePoint REST API の List
や ListItem
の ID と互換性がないため、時として不便に感じることがあります。Drive
や DriveItem
の ID をもとに List
や ListItem
を取得する、または List
や ListItem
の ID をもとに Drive
や DriveItem
を取得する方法について確認したいと思います。
Drive から List を取得する
以下の API を使って Drive
から List
を取得することができます。
https://graph.microsoft.com/v1.0/drives/{{drive-id}}/list
Graph Explorer のサンプル データで実行してみると以下のような感じです。
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#drives('b%21CbtYWrofwUGBJWnaJkNwoNrBLp_kC3RKklSXPwrdeP3yH8_qmH9xT5Y6RODPNfYI')/list/$entity",
"@odata.etag": "\"eacf1ff2-7f98-4f71-963a-44e0cf35f608,203\"",
"createdDateTime": "2017-07-27T02:32:33Z",
"description": "",
"eTag": "\"eacf1ff2-7f98-4f71-963a-44e0cf35f608,203\"",
"id": "eacf1ff2-7f98-4f71-963a-44e0cf35f608",
"lastModifiedDateTime": "2022-01-04T05:30:38Z",
"name": "Shared Documents",
"webUrl": "https://m365x214355.sharepoint.com/Shared%20Documents",
"displayName": "Documents",
"createdBy": {
"user": {
"displayName": "System Account"
}
},
"lastModifiedBy": {
"user": {
"displayName": "System Account"
}
},
"parentReference": {
"siteId": "m365x214355.sharepoint.com,5a58bb09-1fba-41c1-8125-69da264370a0,9f2ec1da-0be4-4a74-9254-973f0add78fd"
},
"list": {
"contentTypesEnabled": false,
"hidden": false,
"template": "documentLibrary"
}
}
List から Drive を取得する
以下の API を使って List
から Drive
を取得することができます。
https://graph.microsoft.com/v1.0/sites/{{site-id}}/lists/{{list-id}}/drive
Graph Explorer のサンプル データで実行してみると以下のような感じです。
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#drives/$entity",
"createdDateTime": "2017-07-27T02:32:33Z",
"description": "",
"id": "b!CbtYWrofwUGBJWnaJkNwoNrBLp_kC3RKklSXPwrdeP3yH8_qmH9xT5Y6RODPNfYI",
"lastModifiedDateTime": "2021-10-02T09:26:38Z",
"name": "Documents",
"webUrl": "https://m365x214355.sharepoint.com/Shared%20Documents",
"driveType": "documentLibrary",
"createdBy": {
"user": {
"displayName": "System Account"
}
},
"lastModifiedBy": {
"user": {
"displayName": "System Account"
}
},
"owner": {
"group": {
"id": "43a63cc2-582b-4d81-a79d-1591f91d5558",
"displayName": "Company Administrator"
}
},
"quota": {
"deleted": 0,
"remaining": 27486887980470,
"state": "normal",
"total": 27487790694400,
"used": 902713930
}
}
DriveItem から ListItem を取得する
以下の API を使って DriveItem
から ListItem
を取得することができます。
https://graph.microsoft.com/v1.0/drives/{{drive-id}}/items/{{drive-item-id}}/listItem
Graph Explorer のサンプル データで実行してみると以下のような感じです。
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#drives('b%21CbtYWrofwUGBJWnaJkNwoNrBLp_kC3RKklSXPwrdeP3yH8_qmH9xT5Y6RODPNfYI')/items('01OXYKUGW6HG5WM2OBTVDZ72ABJAY5P4BY')/listItem/$entity",
"@odata.etag": "\"66bb39de-c169-479d-9fe8-014831d7f038,1\"",
"createdDateTime": "2017-08-06T01:18:34Z",
"eTag": "\"66bb39de-c169-479d-9fe8-014831d7f038,1\"",
"id": "45",
"lastModifiedDateTime": "2017-08-06T01:18:34Z",
"webUrl": "https://m365x214355.sharepoint.com/Shared%20Documents/DemoDocs/AdminDemo",
"createdBy": {
"user": {
"email": "provisioninguser1@m365x214355.onmicrosoft.com",
"displayName": "Provisioning User"
}
},
"lastModifiedBy": {
"user": {
"email": "provisioninguser1@m365x214355.onmicrosoft.com",
"displayName": "Provisioning User"
}
},
"parentReference": {
"id": "870e69b3-b053-4d4c-a898-91d26fd74e63",
"siteId": "m365x214355.sharepoint.com,5a58bb09-1fba-41c1-8125-69da264370a0,9f2ec1da-0be4-4a74-9254-973f0add78fd"
},
"contentType": {
"id": "0x012000A0DEBD25FF52B745937EF93199BFD040",
"name": "Folder"
},
"fields@odata.context": "https://graph.microsoft.com/v1.0/$metadata#drives('b%21CbtYWrofwUGBJWnaJkNwoNrBLp_kC3RKklSXPwrdeP3yH8_qmH9xT5Y6RODPNfYI')/items('01OXYKUGW6HG5WM2OBTVDZ72ABJAY5P4BY')/listItem/fields/$entity",
"fields": {
"@odata.etag": "\"66bb39de-c169-479d-9fe8-014831d7f038,1\"",
"FileLeafRef": "AdminDemo",
"id": "45",
"ContentType": "Folder",
"Created": "2017-08-06T01:18:34Z",
"AuthorLookupId": "36",
"Modified": "2017-08-06T01:18:34Z",
"EditorLookupId": "36",
"_CheckinComment": "",
"LinkFilenameNoMenu": "AdminDemo",
"LinkFilename": "AdminDemo",
"ItemChildCount": "4",
"FolderChildCount": "0",
"_ComplianceFlags": "",
"_ComplianceTag": "",
"_ComplianceTagWrittenTime": "",
"_ComplianceTagUserId": "",
"_CommentCount": "",
"_LikeCount": "",
"_DisplayName": "",
"Edit": "0",
"_UIVersionString": "1.0",
"ParentVersionStringLookupId": "45",
"ParentLeafNameLookupId": "45"
}
}
ListItem から DriveItem を取得する
以下の API を使って ListItem
から DriveItem
を取得することができます。
https://graph.microsoft.com/v1.0/sites/{{site-id}}/lists/{{list-id}}/items/{{list-item-id}}/driveItem
Graph Explorer のサンプル データで実行してみると以下のような感じです。
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites('m365x214355.sharepoint.com%2C5a58bb09-1fba-41c1-8125-69da264370a0%2C9f2ec1da-0be4-4a74-9254-973f0add78fd')/lists('eacf1ff2-7f98-4f71-963a-44e0cf35f608')/items('45')/driveItem/$entity",
"createdDateTime": "2017-08-06T01:18:34Z",
"eTag": "\"{66BB39DE-C169-479D-9FE8-014831D7F038},1\"",
"id": "01OXYKUGW6HG5WM2OBTVDZ72ABJAY5P4BY",
"lastModifiedDateTime": "2017-08-06T01:18:34Z",
"name": "AdminDemo",
"webUrl": "https://m365x214355.sharepoint.com/Shared%20Documents/DemoDocs/AdminDemo",
"cTag": "\"c:{66BB39DE-C169-479D-9FE8-014831D7F038},0\"",
"size": 9921,
"createdBy": {
"user": {
"displayName": "Provisioning User"
}
},
"lastModifiedBy": {
"user": {
"displayName": "Provisioning User"
}
},
"parentReference": {
"driveId": "b!CbtYWrofwUGBJWnaJkNwoNrBLp_kC3RKklSXPwrdeP3yH8_qmH9xT5Y6RODPNfYI",
"driveType": "documentLibrary",
"id": "01OXYKUGVTNEHIOU5QJRG2RGER2JX5OTTD",
"path": "/drives/b!CbtYWrofwUGBJWnaJkNwoNrBLp_kC3RKklSXPwrdeP3yH8_qmH9xT5Y6RODPNfYI/root:/DemoDocs"
},
"fileSystemInfo": {
"createdDateTime": "2017-08-06T01:18:34Z",
"lastModifiedDateTime": "2017-08-06T01:18:34Z"
},
"folder": {
"childCount": 4
}
}
おわりに
Microsoft のドキュメントに書いてあるそのままなのですがなかなか忘れそうなので。ちなみに Microsoft Graph におけるサイトの ID は {{domain-name}},{{site-id}},{{web-id}}
の形式になります。SharePoint REST API の ID がそのまま使えるわけではないのでお気を付けください。
Discussion