Slide 1

Slide 1 text

どっちの API SHOW? SharePoint 開発における Microsoft Graph API と SharePoint REST API の違い 2025/3/25 第 10 回 JPM365DEV 勉強会

Slide 2

Slide 2 text

自己紹介 篠原 敬志 (Takashi Shinohara) アバナード株式会社 グループ マネージャー, アジャイル コーチ Microsoft MVP for AI Platform (2024-2025) Microsoft MVP M365 (2018-2025) Microsoft Top Partner Engineer Award (2023) JPM365DEV 運営

Slide 3

Slide 3 text

本日のアジェンダ SharePoint 開発をする上で Microsoft Graph API と SharePoint REST API の違いとどちらを 使うべきかを理解します。 SharePoint REST API の新しい API について説明します。

Slide 4

Slide 4 text

注意事項 本スライドは 2025/3/25 時点の情報です。今後のバージョン アップにより内容は変更される可 能性があります。 比較内容は独自にまとめたものでマイクロソフトの公式見解ではありません。 ドキュメントに記載のない API を扱うことがあります。使用される場合はご自身の判断でお願いし ます。

Slide 5

Slide 5 text

Microsoft Graph API SharePoint REST API

Slide 6

Slide 6 text

ROUND 1 API の種類

Slide 7

Slide 7 text

API の調べ方 Microsoft Graph API https://learn.microsoft.com/ja-jp/graph/api/overview SharePoint REST API https://learn.microsoft.com/ja-jp/sharepoint/dev/sp-add-ins/get-to-know-the- sharepoint-rest-service https://learn.microsoft.com/ja-jp/previous-versions/office/developer/sharepoint- rest-reference

Slide 8

Slide 8 text

Microsoft Graph API: サイト (1/2) 名前 エンドポイント ルート サイトを取得する GET /sites/root サイトを一覧表示する GET /sites サイトを取得する GET /sites/{site-id} 地域をまたいでサイトを一覧表示する GET /sites/getAllSites サブ サイトを一覧表示する GET /sites/{site-id}/sites パスを使用してサイトを取得する GET /sites/{hostname}:/{relative-path} グループのサイトを取得する GET /groups/{group-id}/sites/root 分析を取得する GET /sites/{site-id}/analytics/allTime GET /sites/{site-id}/analytics/lastSevenDays 間隔ごとにアクティビティを取得する GET /sites/{site-id}/getActivitiesByInterval デルタを取得する GET /sites/delta サイトを検索する GET /sites?search={query} サイトの列を一覧表示する GET /sites/{site-id}/columns サイトの列を取得する GET /sites/{site-id}/columns/{column-id} サイトの列を作成する POST /sites/{site-id}/columns サイトの列を更新する PATCH /sites/{site-id}/columns/{column-id} Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 9

Slide 9 text

Microsoft Graph API: サイト (2/2) 名前 エンドポイント サイトの列を削除する DELETE /sites/{site-id}/columns/{column-id} フォローされたサイトを一覧表示する GET /me/followedSites サイトをフォローする POST /users/{user-id}/followedSites/add サイトのフォローを取り消す POST /users/{user-id}/followedSites/remove アクセス許可を一覧表示する GET /sites/{site-id}/permissions/{permission-id} アクセス許可を取得する GET /sites/{site-id}/permissions アクセス許可を追加する POST /sites/{site-id}/permissions アクセス許可を更新する PATCH /sites/{site-id}/permissions/{permission-id} アクセス許可を削除する DELETE /sites/{site-id}/permissions/{permission-id} 時間のかかる操作を一覧表示する GET /sites/{site-id}/operations 時間のかかる操作を取得する GET /sites/{site-id}/operations/{operation-id} Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 10

Slide 10 text

Microsoft Graph API: リスト 名前 エンドポイント リストを一覧表示する GET /sites/{site-id}/lists リストを取得する GET /sites/{site-id}/lists/{list-id} リストを作成する POST /sites/{site-id}/lists リストを更新する PATCH /sites/{site-id}/lists/{list-id} リストを削除する DELETE /sites/{site-id}/lists/{list-id} リストの列を一覧表示する GET /sites/{site-id}/}/lists/{list-id}/columns リストの列を取得する GET /sites/{site-id}/lists/{list-id}/columns/{column-id} リストの列を作成する POST /sites/{site-id}/lists/{list-id}/columns リストの列を更新する PATCH /sites/{site-id}/lists/{list-id}/columns/{column-id} リストの列を削除する DELETE /sites/{site-id}/lists/{list-id}/columns/{column-id} WebSocket エンドポイントを取得する GET /sites/{site-id}/lists/{list-id}/drive/root/subscriptions/socketIo 時間のかかる操作を一覧表示する GET /sites/{site-id}/lists/{list-id}/operations 時間のかかる操作を取得する GET /sites/{site-id}/lists/{list-id}/operations/{operation-id} Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 11

Slide 11 text

Microsoft Graph API: リスト アイテム 名前 エンドポイント リスト アイテムを一覧表示する GET /sites/{site-id}/lists/{list-id}/items リスト アイテムを取得する GET /sites/{site-id}/lists/{list-id}/items/{item-id} リスト アイテムを作成する POST /sites/{site-id}/lists/{list-id}/items リスト アイテムを更新する PATCH /sites/{site-id}/lists/{list-id}/items/{item-id} リスト アイテムを削除する DELETE /sites/{site-id}/lists/{list-id}/items/{item-id} 分析を取得する GET /sites/{site-id}/lists/{list-id}/items/{item-id}/analytics/allTime GET /sites/{site-id}/lists/{list-id}/items/{item-id}/analytics/lastSevenDays 指定した期間のアクティビティを取得する GET /sites/{site-id}/lists/{list-id}/items/{item-id}/getActivitiesByInterval ドキュメント セットのバージョンを一覧表示する GET /sites/{site-id}/lists/{list-id}/items/{item-id}/documentSetVersions ドキュメント セットのバージョンを取得する GET /sites/{site-id}/lists/{list-id}/items/{item-id}/documentSetVersions /{version-id} ドキュメント セットのバージョンを作成する POST /sites/{site-id}/lists/{list-id}/items/{item-id}/documentSetVersions ドキュメント セットのバージョンを削除する DELETE /sites/{site-id}/lists/{list-id}/items/{item-id}/documentSetVersions /{version-id} ドキュメント セットのバージョンを復元する POST /sites/{site-id}/lists/{list-id}/items/{item-id}/documentSetVersions /{version-id}/restore Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 12

Slide 12 text

Microsoft Graph API: ドライブとドライブ アイテム (1/3) 名前 エンドポイント ドライブを一覧表示する GET /sites/{site-id}/drives ドライブを取得する GET /sites/{site-id}/drives/{drive-id} ドライブのルートを取得する GET /sites/{site-id}/drives/{drive-id}/root ドライブ アイテムを一覧表示する GET /sites/{site-id}/drives/{drive-id}/items/{item-id}/children ドライブ アイテムを取得する GET /sites/{site-id}/drives/{drive-id}/items/{item-id} ドライブ アイテムのバージョンを一覧表示する GET /sites/{site-id}/drives/{drive-id}/items/{item-id}/versions フォルダーを作成する POST /sites/{site-id}/drive/items/{item-id}/children ファイルをアップロードする POST /sites/{site-id}/drive/items/{item-id}/content ファイルのアップロード セッションを作成する POST /sites/{site-id}/drive/items/{item-id}/createUploadSession ファイルをダウンロードする GET /sites/{site-id}/drive/items/{item-id}/content 別の形式でファイルをダウンロードする GET /sites/{site-id}/drive/items/{item-id}/content?format={format} ドライブ アイテムを更新する PATCH /sites/{site-id}/drives/{drive-id}/items/{item-id} ドライブ アイテムを削除する DELETE /sites/{site-id}/drives/{drive-id}/items/{item-id} ドライブ アイテムを完全に削除する POST /sites/{site-id}/drives/{drive-id}/items/{item-id}/permanentDelete ドライブ アイテムを移動する PATCH /sites/{site-id}/drives/{drive-id}/items/{item-id} ドライブ アイテムをコピーする POST /sites/{site-id}/drives/{drive-id}/items/{item-id}/copy Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 13

Slide 13 text

Microsoft Graph API: ドライブとドライブ アイテム (2/3) 名前 エンドポイント ドライブ アイテムを検索する GET /sites/{site-id}/drives/{drive-id}/search(q='{search-text}') ドライブ アイテムをフォローする POST /sites/{site-id}/drives/{drive-id}/items/{item-id}/follow ドライブ アイテムのフォローを取り消す POST /sites/{site-id}/drives/{drive-id}/items/{item-id}/unfollow DELETE /sites/{site-id}/drives/{drive-id}/following/{item-id} サムネイルを取得する GET /sites/{site-id}/drives/{drive-id}/items/{item-id}/thumbnails 共有リンクを作成する POST /sites/{site-id}/drives/{drive-id}/items/{item-id}/createLink アクセス許可を一覧表示する GET /sites/{site-id}/drives/{drive-id}/items/{item-id}/permissions アクセス許可を取得する DELETE /sites/{site-id}/drives/{drive-id}/items/{item-id}/permissions/{perm-id} アクセス許可を追加する POST /sites/{site-id}/drives/{drive-id}/items/{item-id}/invite アクセス許可を更新する DELETE /sites/{site-id}/drives/{drive-id}/items/{item-id}/permissions/{perm-id} ドライブ アイテムをプレビューする GET /sites/{site-id}/drives/{drive-id}/items/{item-id}/preview ドライブ アイテムをチェックインする POST /sites/{site-id}/drives/{drive-id}/items/{item-id}/checkin ドライブ アイテムをチェックアウトする POST /sites/{site-id}/drives/{drive-id}/items/{item-id}/checkout ドライブ アイテムのチェックアウトを破棄する POST /sites/{site-id}/drives/{drive-id}/items/{item-id}/discardCheckout 秘密度ラベルを抽出する POST /sites/{site-id}/drives/{drive-id}/items/{item-id}/extractSensitivityLabels 秘密度ラベルを割り当てる POST /sites/{site-id}/drives/{drive-id}/items/{item-id}/assignSensitivityLabel Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 14

Slide 14 text

Microsoft Graph API: ドライブとドライブ アイテム (3/3) 名前 エンドポイント 保持ラベルを取得する GET /sites/{site-id}/drives/{drive-id}/items/{item-id}/retentionLabel 保持ラベルを設定する PATCH /sites/{site-id}/drives/{drive-id}/items/{item-id}/retentionLabel 保持ラベルを削除する DELETE /sites/{site-id}/drives/{drive-id}/items/{item-id}/retentionLabel レコードをロックまたはロック解除する PATCH /sites/{site-id}/drives/{drive-id}/items/{item-id}/retentionLabel Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 15

Slide 15 text

Microsoft Graph API: コンテンツ タイプ (1/2) 名前 エンドポイント コンテンツ タイプを一覧表示する GET /sites/{site-id}/contentTypes コンテンツ タイプを取得する GET /sites/{site-id}/contentTypes/{contenttype-id} コンテンツ タイプを作成する POST /sites/{site-id}/contentTypes コンテンツ タイプを更新する PATCH /sites/{site-id}/contentTypes/{contenttype-id} コンテンツ タイプを削除する DELETE /sites/{site-id}/contentTypes/{contenttype-id} コンテンツ タイプの発行状態を取得する GET /sites/{siteId}/contentTypes/{contenttype-id}/isPublished コンテンツ タイプを発行する POST /sites/{site-id}/contentTypes/{contenttype-id}/publish コンテンツ タイプの発行を解除する POST /sites/{site-id}/contentTypes/{contenttype-id}/unpublish コンテンツ タイプの列を一覧表示する GET /sites/{site-id}/contentTypes/{contenttype-id}/columns コンテンツ タイプの列を取得する GET /sites/{site-id}/contentTypes/{contenttype-id}/columns/{column-id} コンテンツ タイプの列を作成する POST /sites/{site-id}/contentTypes/{contenttype-id}/columns コンテンツ タイプの列を更新する PATCH /sites/{site-id}/contentTypes/{contenttype-id}/columns/{column-id} コンテンツ タイプの列を削除する DELETE /sites/{site-id}/contentTypes/{contenttype-id}/columns/{column-id} サイトからリストにコンテンツ タイプのコピーを追加する POST /sites/{site-id}/lists/{list-id}/contentTypes/addCopy コンテンツ タイプをハブ サイトの一覧に関連付ける POST /sites/{site-id}/contentTypes/{contenttype-id}/associateWithHubSites コンテンツ タイプの既定のコンテンツの場所にファイルをコピーする POST /sites/{site-id}/contentTypes/{contenttype-id}/copyToDefaultContentLocation Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 16

Slide 16 text

Microsoft Graph API: コンテンツ タイプ (2/2) 名前 エンドポイント 互換性のあるコンテンツ タイプの一覧を取得する GET /sites/{site-id}/contentTypes/getCompatibleHubContentTypes 公開されたコンテンツ タイプのコピーをサイトまたはリストに追加 POST /sites/{site-id}/contentTypes/addCopyFromContentTypeHub または同期する Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 17

Slide 17 text

Microsoft Graph API: サイト ページ (1/3) 名前 エンドポイント ベース サイト ページを一覧表示する GET /sites/{site-id}/pages ベース サイト ページを取得する GET /sites/{site-id}/pages/{page-id} サイト ページを一覧表示する GET /sites/{site-id}/pages/microsoft.graph.sitePage サイト ページを取得する GET /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage サイト ページを作成する POST /sites/{site-id}/pages サイト ページを更新する PATCH /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage サイト ページを削除する DELETE /sites/{site-id}/pages/{page-id} サイト ページを発行する POST /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/publish 水平セクションを一覧表示する GET /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/canvasLayout /horizontalSections 水平セクションを取得する GET /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/canvasLayout /horizontalSections/{horizontal-section-id} 水平セクションを作成する POST /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/canvasLayout /horizontalSections 水平セクションを更新する PATCH /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/canvasLayout /horizontalSections/{horizontal-section-id} Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 18

Slide 18 text

Microsoft Graph API: サイト ページ (2/3) 名前 エンドポイント 水平セクションを削除する DELETE /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage /canvasLayout/horizontalSections/{horizontal-section-id} 水平セクション列を一覧表示する GET /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/canvasLayout /horizontalSections/{horizontal-section-id}/columns 水平セクション列を取得する GET /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/canvasLayout /horizontalSections/{horizontal-section-id}/columns/{horizontal-section-column-id} 垂直セクションを取得する GET /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/canvasLayout /verticalSection 垂直セクションを作成する POST /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/canvasLayout /verticalSection 垂直セクションを更新する PATCH /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/canvasLayout /verticalSection 垂直セクションを削除する DELETE /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/canvasLayout /verticalSection Web パーツを一覧表示する GET /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/webparts Web パーツを取得する GET /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/webParts/{webpart-id} Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 19

Slide 19 text

Microsoft Graph API: サイト ページ (3/3) 名前 エンドポイント Web パーツを作成する POST /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/canvasLayout /horizontalSections/{horizontal-section-id}/columns/{horizontal-section-column-id} /webparts POST /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/canvasLayout /verticalSection/webparts Web パーツを更新する PATCH /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/webParts /{webpart-id} Web パーツを削除する DELETE /sites/{site-id}/pages/{page-id}/microsoft.graph.sitePage/webParts /{webpart-id} Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 20

Slide 20 text

Microsoft Graph API: 用語ストア (1/2) 名前 エンドポイント 用語ストアを取得する GET /sites/{site-id}/termStore 用語ストアを更新する PATCH sites/{site-id}/termStore 用語グループを一覧表示する GET /sites/{site-id}/termStore/groups 用語グループを取得する GET /sites/{site-id}/termStore/groups/{group-id} 用語グループを作成する POST /sites/{site-id}/termStore/groups 用語グループを削除する DELETE /sites/{site-id}/termStore/groups/{group-id} 用語セットを一覧表示する GET /sites/{site-id}/termStore/sets 用語セットを取得する GET /sites/{site-id}/termStore/sets/{set-id} 用語セットを作成する POST /sites/{site-id}/termStore/sets 用語セットを更新する PATCH /sites/{site-id}/termStore/sets/{set-id} 用語セットを削除する DELETE sites/{site-id}/termStore/sets/{set-id} 用語を一覧表示する GET /sites/{site-id}/termStore/sets/{set-id}/children 用語のリレーションを取得する GET /sites/{site-id}/termStore/sets/{set-id}/terms/{term-id}/relations 用語のリレーションを作成する POST /sites/{site-id}/termStore/sets/{set-id}/terms/{term-id}/relations 用語を取得する GET /sites/{site-id}/termStore/sets/{set-id}/terms/{term-id} 用語を作成する POST /sites/{site-id}/termStore/sets/{set-id}/children Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 21

Slide 21 text

Microsoft Graph API: 用語ストア (2/2) 名前 エンドポイント 用語を更新する PATCH /sites/{site-id}/termStore/sets/{set-id}/terms/{term-id} 用語を削除する DELETE /sites/{site-id}/termStore/sets/{set-id}/terms/{term-id} Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 22

Slide 22 text

Microsoft Graph API: テナント管理 名前 エンドポイント SharePoint と OneDrive のテナント レベルの設定を取得する GET /admin/sharepoint/settings SharePoint と OneDrive のテナント レベルの設定を更新する PATCH /admin/sharepoint/settings Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 23

Slide 23 text

SharePoint REST API: サイト (1/3) 名前 エンドポイント ルート サイトを取得する POST /_api/SPO.Tenant/getRootSiteUrl サイト コレクションを一覧表示する POST /_api/SPO.Tenant/getSitePropertiesFromSharePoint サイト コレクションを取得する POST /_api/SPO.Tenant/getSitePropertiesByUrl サイト コレクションを作成する POST /_api/SPSiteManager/create サイト コレクションを削除する POST /_api/SPO.Tenant/removeSite 削除されたサイト コレクションを一覧表示する POST /_api/SPO.Tenant/getDeletedSitePropertiesFromSharePoint 削除されたサイト コレクションを取得する POST /_api/SPO.Tenant/getDeletedSitePropertiesByUrl 削除された個人用サイトを一覧表示する POST /_api/SPO.Tenant/getAllDeletedPersonalSitesPropertiesAllVersions 削除された個人用サイトを取得する POST /_api/SPO.Tenant/getDeletedPersonalSitePropertiesAllVersions サイト コレクションを完全に削除する POST /_api/SPO.Tenant/removeDeletedSite サイト コレクションを復元する POST /_api/SPO.Tenant/restoreDeletedSite サイトを取得する GET /_api/web サイトを更新する POST /_api/web サブ サイトを一覧表示する GET /_api/web/webs サブ サイトを作成する POST /_api/web/webinfos/add サイトを削除する DELETE /_api/web Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 24

Slide 24 text

SharePoint REST API: サイト (2/3) 名前 エンドポイント 権限の継承を削除する POST /_api/web/breakRoleInheritance 権限の継承をリセットする POST /_api/web/resetRoleInheritance アクセス許可を一覧表示する GET /_api/web/roleAssignments アクセス許可を取得する GET /_api/web/roleAssignments/getByPrincipalId({principal-id}) アクセス許可を追加する POST /_api/web/roleAssignments /addRoleAssignment(principalId={principal-id},roleDefId={roledefinition-id}) アクセス許可を削除する DELETE /_api/web/roleAssignments/getByPrincipalId({principal-id}) ユーザーを取得する GET /_api/web/siteUsers ユーザーを確認する POST /_api/web/ensureUser グループを一覧表示する GET /_api/web/siteGroups グループを取得する GET /_api/web/siteGroups/getById({group-id}) グループを作成する POST /_api/web/siteGroups グループを更新する PATCH /_api/web/siteGroups/getById({group-id}) グループを削除する DELETE /_api/web/siteGroups/getById({group-id}) グループにメンバーを追加する POST /_api/web/siteGroups/getById({group-id})/users グループからメンバーを削除する DELETE /_api/web/siteGroups/getById({group-id})/users/getById({user-id}) Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 25

Slide 25 text

SharePoint REST API: サイト (3/3) 名前 エンドポイント グループの所有者を設定する POST /_api/web/siteGroups/getById({group-id})/setUserAsOwner({user-id}) サイトを検索する GET /_api/search/query サイトの列を一覧表示する GET /_api/web/fields サイトの列を取得する GET /_api/web/fields/getById('{field-id}') サイトの列を作成する POST /_api/web/fields サイトの列を更新する PATCH /_api/web/fields/getById('{field-id}') サイトの列を削除する DELETE /_api/web/fields/getById('{field-id}') Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 26

Slide 26 text

SharePoint REST API: リスト (1/2) 名前 エンドポイント リストを一覧表示する GET /_api/web/lists リストを取得する GET /_api/web/lists/getById('{list-id}') リストを作成する POST /_api/web/lists リストを更新する PATCH /_api/web/lists/getById('{list-id}') リストを削除する POST /_api/web/lists/getById('{list-id}')/recycle リストを完全に削除する DELETE /_api/web/lists/getById('{list-id}') 権限の継承を削除する POST /_api/web/lists/getById('{list-id}')/breakRoleInheritance 権限の継承をリセットする POST /_api/web/lists/getById('{list-id}')/resetRoleInheritance アクセス許可を一覧表示する GET /_api/web/lists/getById('{list-id}')/roleAssignments アクセス許可を取得する GET /_api/web/lists/getById('{list-id}')/roleAssignments /getByPrincipalId({principal-id}) アクセス許可を追加する POST /_api/web/lists/getById('{list-id}')/roleAssignments /addRoleAssignment(principalId={principal-id},roleDefId={roledefinition-id}) アクセス許可を削除する DELETE /_api/web/lists/getById('{list-id}')/roleAssignments /getByPrincipalId({principal-id}) ビューを一覧表示する GET /_api/web/lists/getById('{list-id}')/views Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 27

Slide 27 text

SharePoint REST API: リスト (2/2) 名前 エンドポイント ビューを取得する GET /_api/web/lists/getById('{list-id}')/views/getById('view-id') ビューを作成する POST /_api/web/lists/getById('{list-id}')/views ビューを更新する PATCH /_api/web/lists/getById('{list-id}')/views/getById('view-id') ビューを削除する DELETE /_api/web/lists/getById('{list-id}')/views/getById('view-id') リストの列を一覧表示する GET /_api/web/lists/getById('{list-id}')/fields リストの列を取得する GET /_api/web/lists/getById('{list-id}')/fields/getById('{field-id}') リストの列を作成する POST /_api/web/lists/getById('{list-id}')/fields リストの列を更新する PATCH /_api/web/lists/getById('{list-id}')/fields/getById('{field-id}') リストの列を削除する DELETE /_api/web/lists/getById('{list-id}')/fields/getById('{field-id}') Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 28

Slide 28 text

SharePoint REST API: リスト アイテム (1/3) 名前 エンドポイント リスト アイテムを一覧表示する GET /_api/web/lists/getById('{list-id}')/items ストリームとしてリスト アイテムを一覧表示する POST /_api/web/lists/getById('{list-id}')/renderListDataAsStream リスト アイテムを取得する GET /_api/web/lists/getById('{list-id}')/items/getById({item-id}) リスト アイテムを作成する POST /_api/web/lists/getById('{list-id}')/items フォルダー内にリスト アイテムを作成する POST /_api/web/lists/getById('{list-id}')/addValidateUpdateItemUsingPath リスト アイテムを更新する PATCH /_api/web/lists/getById('{list-id}')/items/getById({item-id}) リスト アイテムを削除する POST /_api/web/lists/getById('{list-id}')/items/getById({item-id})/recycle リスト アイテムを完全に削除する DELETE /_api/web/lists/getById('{list-id}')/items/getById({item-id}) 権限の継承を削除する POST /_api/web/lists/getById('{list-id}')/}')/items/getById({item-id}) /breakRoleInheritance 権限の継承をリセットする POST /_api/web/lists/getById('{list-id}')/items/getById({item-id}) /resetRoleInheritance アクセス許可を一覧表示する GET /_api/web/lists/getById('{list-id}')/items/getById({item-id})/roleAssignments アクセス許可を取得する GET /_api/web/lists/getById('{list-id}')/items/getById({item-id})/roleAssignments アクセス許可を追加する POST /_api/web/lists/getById('{list-id}')/items/getById({item-id})/roleAssignments /addRoleAssignment(principalId={principal-id},roleDefId={roledefinition-id}) Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 29

Slide 29 text

SharePoint REST API: リスト アイテム (2/3) 名前 エンドポイント アクセス許可を削除する DELETE /_api/web/lists/getById('{list-id}')/items/getById({item-id}) /roleAssignments/getByPrincipalId({principal-id}) リスト アイテムのバージョンを一覧表示する GET /_api/web/lists/getById('{list-id}')/items/getById({item-id})/versions リスト アイテムのバージョンを取得する GET /_api/web/lists/getById('{list-id}')/items/getById({item-id})/versions /getById({version-id}) リスト アイテムのバージョンを削除する DELETE /_api/web/lists/getById('{list-id}')/items/getById({item-id})/versions /getById({version-id}) リスト アイテムのバージョンを復元する POST /_api/web/lists/getById('{list-id}')/items/getById({item-id})/versions /getById({version-id})/restoreVerion 添付ファイルを一覧表示する GET /_api/web/lists/getById('{list-id}')/items/getById({item-id})/attachmentFiles 添付ファイルを取得する GET /_api/web/lists/getById('{list-id}')/items/getById({item-id})/attachmentFiles /getByFileName('{file-name}') 添付ファイルをアップロードする POST /_api/web/lists/getById('{list-id}')/items/getById({item-id})/attachmentFiles /add(filename='{file-name}') 添付ファイルをダウンロードする GET /_api/web/lists/getById('{list-id}')/items/getById({item-id})/attachmentFiles /getByFileName('{file-name}')/value Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 30

Slide 30 text

SharePoint REST API: リスト アイテム (3/3) 名前 エンドポイント 添付ファイルを削除する DELETE /_api/web/lists/getById('{list-id}')/items/getById({item-id}) /attachmentFiles/getByFileName('{file-name}') Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 31

Slide 31 text

SharePoint REST API: ファイルとフォルダー (1/2) 名前 エンドポイント フォルダー内のフォルダーを一覧表示する GET /_api/web/getFolderByServerRelativeUrl('{folder-path}')/folders フォルダーを取得する GET /_api/web/getFolderByServerRelativeUrl('{folder-path}') フォルダーを作成する POST /_api/web/getFolderByServerRelativeUrl('{folder-path}')/folders フォルダーを変更する PATCH /_api/web/getFolderByServerRelativeUrl('{folder-path}')/listItemAllFields フォルダーを削除する POST /_api/web/getFolderByServerRelativeUrl('{folder-path}')/recycle フォルダーを完全に削除する DELETE /_api/web/getFolderByServerRelativeUrl('{folder-path}') フォルダー内のファイルを一覧表示する GET /_api/web/getFolderByServerRelativeUrl('{folder-path}')/files フォルダーのアクセス許可を一覧表示する GET /_api/web/getFolderByServerRelativeUrl('{folder-path}')/roleAssignments フォルダーのアクセス許可を取得する GET /_api/web/getFolderByServerRelativeUrl('{folder-path}')/roleAssignments /getByPrincipalId({principal-id}) フォルダーのアクセス許可を追加する POST /_api/web/getFolderByServerRelativeUrl('{folder-path}')/roleAssignments /addRoleAssignment(principalId={principal-id},roleDefId={roledefinition-id}) フォルダーのアクセス許可を削除する DELETE /_api/web/getFolderByServerRelativeUrl('{folder-path}')/roleAssignments /getByPrincipalId({principal-id}) ファイルを取得する GET /_api/web/getFileByServerRelativeUrl('{file-path}') ファイルを更新する PUT _api/web/getFileByServerRelativeUrl('{file-path}')/$value Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 32

Slide 32 text

SharePoint REST API: ファイルとフォルダー (2/2) 名前 エンドポイント ファイルを削除する POST /_api/web/getFileByServerRelativeUrl('{file-path}')/recycle ファイルを完全に削除する DELETE /_api/web/getFileByServerRelativeUrl('{file-path}') ファイルをアップロードする POST /_api/web/getFolderByServerRelativeUrl('{folder-path}')/files /add(url='{file-name}',overwrite={overwrite}) ファイルのアップロード セッションを作成する POST _api/web/getFileByServerRelativeUrl('{file-path}') /startUpload(uploadId='{upload-id}') ファイルをダウンロードする GET _api/web/getFileByServerRelativeUrl('{file-path}')/$value GET _api/web/getFileByServerRelativeUrl('{file-path}')/openbinarystream ファイルのアクセス許可を一覧表示する GET /_api/web/getFileByServerRelativeUrl('{file-path}')/roleAssignments ファイルのアクセス許可を取得する GET /_api/web/getFileByServerRelativeUrl('{file-path}')/roleAssignments /getByPrincipalId({principal-id}) ファイルのアクセス許可を追加する POST /_api/web/getFileByServerRelativeUrl('{file-path}')/roleAssignments /addRoleAssignment(principalId={principal-id},roleDefId={roledefinition-id}) ファイルのアクセス許可を削除する DELETE /_api/web/getFileByServerRelativeUrl('{file-path}')/roleAssignments /getByPrincipalId({principal-id}) ファイルをチェックアウトする POST _api/web/getFileByServerRelativeUrl('{folder-path}')/checkOut Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 33

Slide 33 text

SharePoint REST API: ファイルとフォルダー (3/3) 名前 エンドポイント ファイルをチェックインする POST _api/web/getFileByServerRelativeUrl('{folder-path}')/checkIn ファイルのチェックアウトを破棄する POST _api/web/getFileByServerRelativeUrl('{folder-path}')/undoCheckOut Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 34

Slide 34 text

SharePoint REST API: コンテンツ タイプ 名前 エンドポイント コンテンツ タイプを一覧表示する GET /_api/web/contentTypes コンテンツ タイプを取得する GET /_api/web/contentTypes/getById('{contenttype-id}') コンテンツ タイプを作成する POST /_api/web/contentTypes コンテンツ タイプを更新する PATCH /_api/web/contentTypes/getById('{contenttype-id}') コンテンツ タイプを削除する DELETE /_api/web/contentTypes/getById('{contenttype-id}') コンテンツ タイプの列を一覧表示する GET /_api/web/contentTypes/getById('{contenttype-id}')/fieldLinks コンテンツ タイプの列を取得する GET /_api/web/contentTypes/getById('{contenttype-id}')/fieldLinks /getById('{field-id}') サイトからリストにコンテンツ タイプのコピーを追加する POST /_api/web/contentTypes/getById('{contenttype-id}')/addAvailableContentType Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 35

Slide 35 text

SharePoint REST API: テナント管理 名前 エンドポイント テナントの設定を取得する GET /_api/SPO.Tenant テナントの設定を更新する PATCH /_api/SPO.Tenant Microsoft Graph API v1.0 と SharePoint REST API v1.0 を比較し、Microsoft Graph API にしかないものを赤字、SharePoint REST API にしかないものを青字で表示しています。

Slide 36

Slide 36 text

ROUND 1: まとめ Microsoft Graph API には SharePoint Online の新しい機能に関する API が多い SharePoint REST API には SharePoint の設定を操作する API が多い

Slide 37

Slide 37 text

異議 あり!

Slide 38

Slide 38 text

SharePoint REST API の新しいエンドポイント SharePoint REST API には Microsoft Graph API を呼び出すためのエンドポイントがある • /_api/v2.0/sites • /_api/v2.0/drives • /_api/v2.1/sites • /_api/v2.1/drives 参考: https://learn.microsoft.com/ja-jp/sharepoint/dev/apis/sharepoint-rest-graph

Slide 39

Slide 39 text

ROUND 1: まとめ (修正) Microsoft Graph API には SharePoint Online の新しい機能に関する API が多い SharePoint REST API には SharePoint の設定を操作する API が多い SharePoint REST API の新しいエンドポイントを使用すれば Microsoft Graph API の操作も実 行できる SharePoint REST API

Slide 40

Slide 40 text

ROUND 2 認証とスコープ

Slide 41

Slide 41 text

スコープの比較: 委任されたアクセス許可 スコープの種類 Microsoft Graph API SharePoint REST API サイト Sites.Read.All AllSites.Read Sites.ReadWrite.All AllSites.Write Sites.Manage.All AllSites.Manage Sites.FullControl.All AllSites.FullControl Sites.Selected - リスト Lists.SelectedOperations.Selected - リスト アイテム ListItems.SelectedOperations.Selected - ファイル Files.Read MyFiles.Read Files.ReadWrite MyFiles.Write Files.Read.All - Files.ReadWrite.All - Files.Read.Selected - Files.SelectedOperations.Selected - 検索 - Sites.Search.All 用語ストア TermStore.Read.All TermStore.Read.All TermStore.ReadWrite.All TermStore.ReadWrite.All

Slide 42

Slide 42 text

スコープの比較: アプリケーションのアクセス許可 スコープの種類 Microsoft Graph API SharePoint REST API サイト Sites.Read.All Sites.Read.All Sites.ReadWrite.All Sites.Write.All Sites.Manage.All Sites.Manage.All Sites.FullControl.All Sites.FullControl.All Sites.Archive.All - Sites.Selected Sites.Selected リスト Lists.SelectedOperations.Selected - リスト アイテム ListItems.SelectedOperations.Selected - ファイル Files.Read.All - Files.ReadWrite.All - Files.ReadWrite.AppFolder - Files.SelectedOperations.Selected - 用語ストア TermStore.Read.All TermStore.Read.All TermStore.ReadWrite.All TermStore.ReadWrite.All

Slide 43

Slide 43 text

委任されたアクセス許可とアプリケーションのアクセス許可 委任されたアクセス許可 アプリケーションにログインしたユーザーとして動作する アプリケーションに付与されたアクセス許可とユーザーに付与されたアクセス許可の最小範囲のリソ ースにのみアクセス可能 アプリケーションのアクセス許可 アプリケーションのそのものとして動作する 付与されたアクセス許可に対するすべてのリソースにアクセス可能 いわゆるシステム アカウントであるため取り扱いには注意 参考: https://learn.microsoft.com/ja-jp/entra/identity-platform/permissions-consent-overview

Slide 44

Slide 44 text

リソース固有のアクセス許可 特定のサイト、リスト、リスト アイテムに対してのアクセス許可を指定できる 例えば Sites.Read.All はユーザーがアクセスできるサイトにはすべてアクセス可能だが Site.Selected はアクセス可能と設定されたサイトにのみアクセスできるように構成できる 実際にアクセス可能なリソースは Microsoft Graph API で指定する • /sites/{site-id}/permissions • /sites/{site-is}/lists/{list-id}/permissions • /sites/{site-is}/lists/{list-id}/items/{item-id}/permissions • /drives/{drive-id}/items/{item-id}/permissions 参考: https://learn.microsoft.com/ja-jp/sharepoint/dev/sp-add-ins-modernize/understanding-rsc-for-msgraph-and-sharepoint-online

Slide 45

Slide 45 text

アプリケーションのアクセス許可での証明書とシークレット SharePoint REST API ではアプリケーションのアクセス許可にシークレットを使用できない アクセス トークンは取得できるが API を呼び出すと Unsupported app only token というエラー メッセージが表示されるため証明書を使用する必要がある Microsoft Graph API ではそのような制限はなくシークレットと証明書のどちらも使用できる シークレットより証明書のほうがセキュアのため可能であれば証明書を使用する 参考: https://learn.microsoft.com/ja-jp/sharepoint/dev/solution-guidance/security-apponly-azuread

Slide 46

Slide 46 text

ROUND 2: まとめ Microsoft Graph API は SharePoint REST API に比べてスコープの種類が多い SharePoint REST API はアプリケーションのアクセス許可で証明書しか使用できない Microsoft Graph API

Slide 47

Slide 47 text

ROUND 3 リクエストの調整

Slide 48

Slide 48 text

ユーザー レベルのリクエスト調整 調整の種類 間隔 制限 1 秒あたりのリクエスト回数 5 分ごと 3,000 回 イングレス 1 時間ごと 50 GB エグレス 1 時間ごと 100 GB 委任されたトークンの要求回数 5 分ごと 50 回 外部共有メール 1 時間ごと 200 通 参考: https://learn.microsoft.com/en-us/sharepoint/dev/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online

Slide 49

Slide 49 text

テナント レベルのリクエスト調整 ライセンス数 0 - 1,000 1,001 - 5,000 5,001 - 15,000 15,001 - 50,000 50,000 - 5 分ごと 18,750 RU 37,500 RU 56,250 RU 75,000 RU 93,750 RU 参考: https://learn.microsoft.com/en-us/sharepoint/dev/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online

Slide 50

Slide 50 text

アプリケーション レベルのリクエスト調整 ライセンス数 0 - 1,000 1,001 - 5,000 5,001 - 15,000 15,001 - 50,000 50,000 - 1 分ごと 1,250 RU 2,500 RU 3,750 RU 5,000 RU 6,250 RU 24 時間ごと 1,200,000 RU 2,400,000 RU 3,600,000 RU 4,800,000 RU 6,000,000 RU 参考: https://learn.microsoft.com/en-us/sharepoint/dev/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online

Slide 51

Slide 51 text

リソース ユニット (RU) の計算方法 要求あたりのリソース ユニット数 操作 1 アイテムの取得などの単一アイテム クエリ トークンを使用した差分 ファイルのダウンロード 2 リストの子などの複数項目クエリ 作成、更新、削除、アップロード 5 すべてのアクセス許可リソース操作 ($expand=permissions を含む) 参考: https://learn.microsoft.com/en-us/sharepoint/dev/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online

Slide 52

Slide 52 text

調整を処理する方法 調整を処理するためのベスト プラクティスとして以下の方法があります。 • 同時要求の数を減らす • 要求の急増を回避する • 可能な場合は SharePoint REST API よりも Microsoft Graph API を使用する • Retry-After および RateLimit ヘッダーを使用する • HTTP トラフィックを装飾する Microsoft Graph API を使用するべき理由 • SharePoint REST API では RU 以外の内部調整を受ける可能性がある • 一般的に Microsoft Graph API のほうがリソースの消費量が少ない

Slide 53

Slide 53 text

ROUND 3: まとめ SharePoint REST API と Microsoft Graph API では同じリクエスト調整が発生する SharePoint REST API は追加の内部調整が発生する可能性がある Microsoft Graph API のほうがリソースの消費量が少ない Microsoft Graph API

Slide 54

Slide 54 text

APPENDIX Microsoft Graph API と SharePoint REST API の併用

Slide 55

Slide 55 text

複数のサービスに対する Entra ID アプリケーションの制限 Microsoft Graph API と SharePoint REST API には同じアクセス トークンが使えない アクセス許可が共通していてもアクセス トークンの aud が異なるため片方のサービスで取得し たアクセス トークンをもう片方のサービスで使用できない 複数のサービスのスコープを指定したアクセス トークンも取得できない MSAL では複数のアクセス トークンの取得をサポートしない どうしても複数のサービスを使いたい場合は On-Behalf-Of フローを使用する

Slide 56

Slide 56 text

On-Behalf-Of フロー Web API から他の Web API にアクセスするための OAuth フロー Microsoft Graph API SharePoint REST API Web App Web API Entra ID 1. Web APIへ のアクセス トー クンを取得 2. Web APIに リクエスト 3. アクセス トー クンを交換 4. サービスにリ クエスト/レス ポンス 参考: https://learn.microsoft.com/ja-jp/entra/identity-platform/v2-oauth2-on-behalf-of-flow 5. Web App にレスポンス

Slide 57

Slide 57 text

まとめ

Slide 58

Slide 58 text

まとめ SharePoint の機能を使い倒したいのであれば SharePoint REST API 細かいセキュリティやアクセス制御をしたいのであれば Microsoft Graph API 大量リクエストが発生する可能性があるのであれば Microsoft Graph API

Slide 59

Slide 59 text

ご清聴ありがとうございました