用 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 是由21世紀互聯來運營的,所以在中國使用的 API 介面地址也是和全世界其它地域不一樣的。 這個文件記錄了所有 Office 365 在國內和國外所使用的
接下去我會用到微軟開放技術的一個開源專案來作為例子,簡單介紹一下如何用 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 操作的詳細文件。