1. 程式人生 > >用 PHP 連線上 Office 365 REST API 進行操作入門

用 PHP 連線上 Office 365 REST API 進行操作入門

Office 365 簡單說就是雲中的 Office,是能夠提供最佳生產力和高效協同的高階雲服務,是微軟公司基於雲平臺的應用套件。 Office 365 REST API 包含了對以下資料的操作:

  • Exchange Online 的郵件(Mail)、日曆(Calendar)、聯絡人(Contact)
  • SharePoint Online 和 OneDrive for Business 的檔案和資料夾
  • Azure 活動目錄(Active Directory)的使用者和使用者組

來張結構圖看得更直觀一些。
Office 365 Architecture

在中國大陸地區的 Office 365 是由21世紀互聯來運營的,所以在中國使用的 API 介面地址也是和全世界其它地域不一樣的。 這個文件記錄了所有 Office 365 在國內和國外所使用的

REST API 介面地址

接下去我會用到微軟開放技術的一個開源專案來作為例子,簡單介紹一下如何用 PHP 來對 Office 365 REST API 進行操作。 在這個專案裡,Office 365 的 API 已外掛的形式被接到 Moodle 上。 這樣一來,使用者可以實現 Moodle 和 Office 365 之間的資料互通,做到實時資料同步。

Single Sign-On

實現與 Office 365 的單點登入可以通過以下幾個方法:

  • Active Directory 聯合身份驗證服務(ADFS)
  • Shibboleth 標識提供程式
  • SAML 2.0 標識提供程式
  • 批准的第三方標識提供程式

HTTP Client

定義專用於連線 Office 365 REST API 的 HTTP client 物件 httpclient(繼承自 Curl),支援 get、post、put、patch、merge、delete 的操作。

Calendar

定義對 Calendar REST API 操作的物件 calendar(繼承自 o365api)。 在 Moodle 的使用場景中,使用者需要將 Moodle 事件實時同步至 Office 365 日曆上。

建立新的事件 POST 以下資料至
https://partner.outlook.cn/api/v1.0/me/events

{
  "Subject": "新建事件的標題",
  "Body": {
    "ContentType": "HTML",
    "Content": "新建事件的內容"
  },
  "Start": "2014-07-02T18:00:00Z",
  "End": "2014-07-02T19:00:00Z",
  "Attendees": [
    {
      "EmailAddress": {
        "Address": "使用者登陸郵箱地址",
        "Name": "使用者姓名"
      },
      "Type": "Required"
    }
  ],
  "StartTimeZone": "Pacific Standard Time",
  "EndTimeZone": "Pacific Standard Time"
}

更新現有的事件 PATCH 以下資料(只包含被更新的內容)至
https://partner.outlook.cn/api/v1.0/me/events/{event_id}

{
  "Location": {
    "DisplayName": "更新的事件地點"
  }
}

刪除現有的事件傳送 DELETE 至
https://partner.outlook.cn/api/v1.0/me/events/{event_id}

OneDrive for Business

定義對 Files REST API 操作的物件 onedrive(繼承自 o365api)。 在 Moodle 的使用場景中,使用者需要訪問在 OneDrive 雲端儲存上的檔案。

建立新的檔案 PUT 檔案資料至
https://{tenant}-my.partner.sharepoint.cn/_api/v1.0/me/Files/{parent-id}/children/{file-name}/content
請參考 httpclient 裡的 put() 函式對處理新建檔案的邏輯。

獲取資料夾內容傳送 GET 至
https://{tenant}-my.partner.sharepoint.cn/_api/v1.0/me/Files/getByPath('{folder-path}')/children

獲取檔案可以使用絕對路徑或者檔案 ID,傳送 GET 至
https://{tenant}-my.partner.sharepoint.cn/_api/v1.0/me/Files/getByPath('{file-path}')/content
https://{tenant}-my.partner.sharepoint.cn/_api/v1.0/me/Files/{file-id}/content

有關更多的操所,請參考 Files REST API 操作的詳細文件。

這篇部落格寫得比較倉促,還有很多有關 Office 365 REST API 的操作沒有提到,以後會慢慢補上。 作為學習目的,這個用 PHP 寫的 Moodle 整合 Office 365 的開源專案 絕對是一個好的參考。