やりたいこと
Microsoft GraphからSharePoint APIを使いたいが、そこで必要な サイトID や ドライブID (各種ID)を調べたい
前提条件
- ログインしているユーザーが各種IDを取得してくるドライブやファイル/フォルダの閲覧以上の権限を持っていること
- Microsoft Graph Explorer が使用できること
事前準備
- Microsoft Graph Explorer でログインしておく
各種IDのざっくりとした説明
SharePointではサイトごとに存在するドライブやフォルダ、ファイルなど
それぞれにユニークな値が付与されており、〇〇〇-id
と呼ばれるものが複数登場します。
1つのSharePointサイトに サイトID が割り当てられ、そのなかにdriveが存在し、
driveの中にフォルダ/ファイルが存在しているような感じです。
そのため、各種IDを取得するためにまずは一番上のサイトIDから探し、そのあと ドライブID , アイテムID も取得していきます
作業の流れ
➀サイトIDを取得する
Graph APIでクエリを実行します
<検索したい値>をSharePointサイト名に置き換えてGraph APIを実行します。
https://graph.microsoft.com/v1.0/sites?search=<検索したい値>
レスポンスのJSONが返ってきて、目的のSharePointサイトのvalueを探します。
サイトID はid
の値であるcontoso.sharepoint.com,2C712604-1370-44E7-A1F5-426573FDA80A,2D2244C3-251A-49EA-93A8-39E1C3A060FE
に該当します。
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites",
"value": [
{
"createdDateTime": "<日付>",
"description": "<説明文>",
"id": "contoso.sharepoint.com,2C712604-1370-44E7-A1F5-426573FDA80A,2D2244C3-251A-49EA-93A8-39E1C3A060FE",
"lastModifiedDateTime": "<日付>",
"name": "<URLに使用されるサイト名>",
"webUrl": "<SharePointのURL>",
"displayName": "<SharePointの表示で使用されるサイト名>",
"root": {},
"siteCollection": {
"hostname": "contoso.sharepoint.com"
}
}
]
}
➁ドライブIDを取得する
➀で取得したサイトIDを使って次はドライブIDを取得します
<サイトID>の値を当てはめてクエリを実行します
https://graph.microsoft.com/v1.0/sites/<サイトID>/drive
参考 : サイトのドキュメント ライブラリを取得する - Microsoft Graph
ドライブIDはid
の値になります。
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#drives/$entity",
"createdDateTime": "<日付>",
"description": "",
"id": "<ドライブID>",
"lastModifiedDateTime": "<日付>",
"name": "ドキュメント",
"webUrl": "https://contoso.sharepoint.com/sites/folderName",
"driveType": "documentLibrary",
"createdBy": {
"user": {
"displayName": "<ユーザー名>"
}
}
...
}
➂アイテムIDを取得する
ドライブ内のアイテムのうち、ここではまずドライブのルートに存在するファイル/フォルダのアイテムIDを取得してみます
https://graph.microsoft.com/v1.0/drives/<➁で取得したドライブID>/items/root/children
JSONの記載は省きますが、レスポンスで返ってきたJSONのvalueに、ファイルとフォルダの情報が配列で含まれています。
そこに存在するid
がアイテムIDになります。
ルートフォルダ以外のアイテム(フォルダ/ファイル)のアイテムIDを探したい場合、
上記のやり方では面倒なので、ほかのクエリを使用します。
https://graph.microsoft.com/v1.0/drives/<➁で取得したドライブID>/root/search(q='<ドライブ内で検索したい値>')
正しく検索ができていれば、レスポンスのJSONからアイテムIDが分かるはずです。
補足
Microsoft Graphを実行したときに権限エラーで怒られた場合、下記の権限設定がされている必要があるかもしれません。実行したいAPIのURLを入力した後に、青色の権限編集ボタンを押すと、実行するために必要な権限が表示されるため、必要なもの(すべて必要なわけではないと思います)に赤枠のところから権限委任をしておいてください。
Microsoft Graphがログインユーザーの代わりにAPI実行するのを許可しているのだと思います。