GraphHttpClient概述

Justin-Liu發表於2017-10-30

部落格地址:http://blog.csdn.net/FoxDave

目前這個東西還在預覽階段,所以不推薦在正式生產環境中使用。

我們可以使用Microsoft Graph介面來構建強大的解決方案來訪問Office 365和其他微軟服務的資料。為了使SPFx的解決方案能夠連線到Microsoft Graph,你需要註冊一個Azure AD應用程式並完成授權流。為了簡化這個過程,GraphHttpClient出現了,通過使用它,你可以直接呼叫Microsoft Graph介面而不需要其他額外的設定。

GraphHttpClient類是什麼?

GraphHttpClient類作為SharePoint Framework的一部分包含在其中。它的工作方式跟HttpClient類似,你可以使用它來跟第三方應用程式介面通訊。該類會自動確保你對Microsoft Graph的請求擁有有效的訪問令牌和必須的請求頭。當你發出一個GET或POST請求時,GraphHttpClient會驗證它是否擁有一個有效的訪問令牌,如果沒有它將會從內部API獲取一個並儲存下來用於接下來的請求。

下面的程式碼演示了使用GraphHttpClient類訪問Microsoft Graph介面。

// ...
import { GraphHttpClient, GraphClientResponse } from '@microsoft/sp-http';

export default class MyApplicationCustomizer
  extends BaseApplicationCustomizer<IMyApplicationCustomizerProperties> {

  // ...

  @override
  public onRender(): void {
    this.context.graphHttpClient.get("v1.0/groups?$select=displayName", GraphHttpClient.configurations.v1)
      .then((response: GraphClientResponse): Promise<any> => {
        return response.json();
      })
      .then((data: any): void => {
        // ...
      });
  }
}

向Microsoft傳送請求,需要以下幾個步驟:

1. 從@microsoft/sp-http包引入GraphHttpClient和GraphClientResponse模組。

2. 使用this.context.graphHttpClient屬性作為該類的例項來傳送請求道Microsoft Graph。

3. 指定想要呼叫的Microsoft Graph API(從版本開始,不帶前面的斜槓/)。

4. 你還可以指定額外的請求頭,這些會跟GraphHttpClient設定的預設頭進行合併。

使用GraphHttpClient類需要考慮的事情

GraphHttpClient類提取了授權流和訪問令牌的管理,使得訪問Microsoft Graph更加便捷。由於現在正處於開發預覽版,在使用它的過程中你需要注意以下一些事情。

僅用來訪問Microsoft Graph介面

使用GraphHttpClient類僅能訪問Microsoft Graph。URL必須如前所述指定為以Microsoft Graph API版本開頭,加上API操作的URL,任何不符合此條件的URL都會返回一個錯誤。

許可權

GraphHttpClient使用Office 365 SharePoint Online的Azure AD應用程式來獲取有效的訪問令牌,該令牌代表當前使用者。獲取來的訪問令牌有兩個許可權:讀寫所有組(Group.ReadWrite.All)和讀取所有使用率報告(Reports.Read.All)。

注意僅有這兩個許可權,因此如果你需要其他的許可權,你就需要使用ADAL JS with implicit OAuth flow來代替它。

訪問令牌通過內部API獲得

GraphHttpClient通過發起一個web請求到/_api/SP.OAuth.Token/Acquire端點來獲得有效的訪問令牌。對外是不公開的,也就是說你是無法在你的解決方案中直接與它通訊的。