SharePoint 基於 REST API使用簡介


之前已經介紹了SP2010中支持CSOM的API進行遠程訪問SharePoint,但是CSOM的API仍然有一定的局限性,首先使用CSOM類庫是基於.Net的,因此也將使用CSOM限制在了.Net平台上(包括托管的.Net代碼,Silver Light 以及Javascript)。如何能在非.Net平台上操作SharePoint數據呢?

本文簡單介紹一下SharePoint REST api的使用方式,筆者本人也沒有用到過相關技術進行開發,難免有理解不到位的地方。歡迎大家拍磚。

讀懂此文章,建議你至少大概的知道,什么是REST api,為什么使用REST api,它的優勢在哪。本文不會展開講述講述REST相關的知識。

REST API架構

從SharePoint2013開始,REST被集成到了SharePoint中,你可以創建一個RESTful 的HttpWebRequest來訪問SharePoint數據。REST的大體架構如下:

首先,通過用OData標准,創建一個符合你想要調用的Client Object Model的API所匹配的Http請求。SharePoint服務器端在通過client.svc處理HttpRequest后,會返回相應的Atom或者JSON。

 

如何生成一個RESTful的HttpRequest

在SharePoint的Client Object Model,如果想要獲取一個List對象,那么你需要

Lists.GetListByTitle

那么對應的Request地址為:http://server/site/_api/lists/getbytitle('listname') 。圖片 link 完整的解釋了根據CSOM生成HttpRequest的語法。

因此如果我們需要通過REST API來獲取一個List,我們需要寫如下的代碼:

HttpWebRequest endpointRequest = (HttpWebRequest)HttpWebRequest.Create("https://cnblogtest.sharepoint.com/_api/lists/getbytitle('Documents')");

endpointRequest.Method = "GET";

endpointRequest.Accept = "application/json;odata=verbose";

endpointRequest.Headers.Add("Authorization",

"Bearer " +serviceToken

HttpWebResponse endpointResponse = (HttpWebResponse)endpointRequest.GetResponse();

 

如何解決權限的問題

關於serviceToken如何解決的問題,在msdn找了半天,目前我這邊還沒找到線程的例子,從msdn上的描述來看,OAuth 的解決方式主要用於host在provider上的app跟SharePoint 服務器間的權限認證。既然REST也是調用CSOM的另一種方式,我們就看一下CSOM是如實現權限的認證的。

下面我們運行一下SharePoint Client Object Model API 介紹以及工作原理解析 中的例子代碼,截獲一下這個代碼的請求看一下CSOM的權限認證方式:

我們一共截取到如下的請求信息:

這里面,主要關注一下最后一次查詢的報頭:

這里面我們可以看到,通信主要是通過cookie來進行權限認證的,這里面我們也可以嘗試一下用cookie來獲取。

如何獲取Cookie

實際上我們獲取cookie只需要用代碼來模擬我們截獲到的這四次請求即可,讓后替換掉里面一些諸如用戶名,密碼,Expire信息等相關的字符串。由於代碼中認證的相關邏輯都是封裝在了SharePointOnlineCredentials 這個類中,我們可以反編譯看一下封裝這個報頭的相關邏輯,我們可以直接把里面的代碼復制出來獲取cookie即可。相關類如下:

這樣getlistbytitle的調用代碼如下:

            HttpWebRequest endpointRequest = (HttpWebRequest)HttpWebRequest.Create("https://cnblogtest.sharepoint.com/_api/lists/getbytitle('Documents')");

            endpointRequest.Method = "GET";
            endpointRequest.Accept = "application/json;odata=verbose";
            endpointRequest.ContentLength = 0;
            var cookieContainer1 = new CookieContainer();

            SharePointOnlineAuthenticationProvider provider = new SharePointOnlineAuthenticationProvider();

            endpointRequest.CookieContainer = provider.GetAuthenticationCookie(new Uri("https://cnblogtest.sharepoint.com"), "test001@cnblogtest.onmicrosoft.com",
                pasword);

            HttpWebResponse endpointResponse = (HttpWebResponse)endpointRequest.GetResponse();

            var stream = endpointResponse.GetResponseStream();

            using (StreamReader sw = new StreamReader(stream))
            {
                var line = sw.ReadToEnd();
            }

 

 

返回的JSON格式的報文如下:

這樣返回的JSON信息,就可以通過不同的語言來進行解析了。當然,如果你使用的是JS或者其他語言,獲取cookie可能有其他方式,這里不再列舉。

此例子用到的代碼,可以以不同的編程語言的實現。SharePoint REST API,實現了基於其他語言的來訪問SharePoint的可能性,這本身是REST本身的優勢,也是SharePoint 2013帶給編程人員一個大的功能優勢。

 

 參考文章:

http://msdn.microsoft.com/en-us/magazine/dn198245.aspx

http://msdn.microsoft.com/en-us/library/office/jj164022(v=office.15).aspx#WritingData

 

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM