SharePoint REST API - 基本操作(一)
部落格地址:http://blog.csdn.net/FoxDave
本文講述如何應用SharePoint的REST介面完成基本的增刪查改操作。
使用SharePoint客戶端API和REST服務進行開發
你可以使用SharePoint提供的REST介面執行基本的增刪查改操作。REST介面暴露了所有的SharePoint客戶端API中可操作的物件和操作。使用REST的優勢是你可以不新增SharePoint類庫或客戶端的引用,而是使用HTTP請求訪問特定的終結點來獲取或更新SharePoint物件,如網站,列表和列表項。可以檢視之前的文章瞭解SharePoint REST介面和架構的概述。
在之後的文章中也會對每個操作進行細緻的介紹。
在SharePoint REST服務中的HTTP操作
SharePoint REST服務的終結點與客戶端物件模型是對應的關係。通過使用HTTP請求,你可以使用REST終結點來對SharePoint物件執行經典的增刪查改操作,如列表和網站。
通常情況下,終結點的讀取操作對應HTTP的GET方法,更新對應POST,更新或新增操作對應PUT。在SharePoint中,使用POST來建立如列表或網站的SharePoint物件,方式是通過SharePoint REST服務傳送包含物件定義的POST命令到集合終結點來建立物件,比如傳送請求到http://<site url>/_api/web/lists來建立一個列表。
對於POST操作,任何不必填的屬性都會被設定為它們的預設值。如果你想要通過POST操作設定只讀屬性,服務會返回異常。
使用PUT和MERGE操作來更新已經存在的SharePoint物件。任何一個表示設定屬性的服務終結點都支援PUT和MERGE兩種請求。對於MERGE請求,設定屬性是可選的,任何沒在請求中顯式宣告的屬性都將保留當前的屬性值。但是對於PUT操作,相當於重新整理,任何沒在請求中顯式宣告的屬性都將被設定為預設值。而且,如果你不指定所有必填的屬性,服務會返回異常。
使用HTTP的DELETE操作請求指定的終結點來刪除SharePoint物件,對於能夠回收的物件如列表、檔案和列表項,執行的是刪除到回收站的操作。
通過SharePoint REST介面來讀取資料
使用SharePoint內建的REST,你可以構建一個使用OData標準的REST的HTTP請求,跟你想要使用的客戶端物件模型是對應的。每個SharePoint物件都暴露在一個SharePoint網站的終結點,它們的資料是XML或者JSON格式。你可以使用任何語言構建HTTP請求,不只限於JavaScript和C#。
從REST終結點讀取資訊,你必須瞭解終結點的URL和暴露在其上的SharePoint物件的OData描述。例如,獲取SharePoint網站的所有列表資訊,你可以使用GET操作的請求到http://<site url>/_api/web/lists。你可以在瀏覽器中訪問這個URL來檢視返回的XML。當你在程式碼中執行請求的時候,你可以指定獲取JSON還是XML格式的資料。
下面的程式碼展示瞭如何通過JQuery使用GET請求來返回一個網站的所有列表資料JSON資料。這裡假設你有一個可用的OAuth訪問令牌儲存在accessToken變數中。當你在網站內部進行呼叫是不需要這個令牌的。注意你是不能通過執行在客戶端的瀏覽器來獲取訪問令牌的,而是必須在伺服器上獲取。關於如何獲取訪問令牌,我們將在之後的文章中進行介紹。
HttpWebRequest endpointRequest =
(HttpWebRequest)HttpWebRequest.Create(
"http://<site url>/_api/web/lists");
endpointRequest.Method = "GET";
endpointRequest.Accept = "application/json;odata=verbose";
endpointRequest.Headers.Add("Authorization",
"Bearer " + accessToken);
HttpWebResponse endpointResponse =
(HttpWebResponse)endpointRequest.GetResponse();
如果使用SharePoint跨域庫的話,程式碼會有一些不同。在這種情況下你不需要提供訪問令牌。下面的程式碼展示了在使用跨域庫時請求的樣子,取而代之的會獲取XML型別的返回資料。關於跨域庫的使用以後有機會也會給大家進行分享。
var executor = new SP.RequestExecutor(appweburl);
executor.executeAsync(
{
url:
appweburl +
"/_api/SP.AppContextSite(@target)/web/lists?@target='" +
hostweburl + "'",
method: "GET",
success: successHandler,
error: errorHandler
}
);
下面的程式碼展示瞭如何用C#獲取相關資料的示例,同樣假定你已經獲取到了訪問令牌。HttpWebRequest endpointRequest = (HttpWebRequest)HttpWebRequest.Create(sharepointUrl.ToString() + "/_api/web/lists");
endpointRequest.Method = "GET";
endpointRequest.Accept = "application/json;odata=verbose";
endpointRequest.Headers.Add("Authorization", "Bearer " + accessToken);
HttpWebResponse endpointResponse = (HttpWebResponse)endpointRequest.GetResponse();
獲取資源未返回的屬性
在你獲取一個資源時會返回許多屬性值,但是有些屬性你必須顯示地呼叫REST終結點進行獲取,就像CSOM中有些屬性需要顯示宣告來Load。比如從一個檔案資源獲取Author屬性:
http:// _<site url>_/_api/web/getfilebyserverrelativeurl('/ _<folder name>_/ _<file name>_')/author
使用REST介面進行寫入資料
你可以通過REST形式的HTTP請求更新SharePoint物件,和讀取資料類似。一個關鍵的不同是寫資料時需要使用POST請求,在更新SharePoint物件時,還要傳遞PUT或MERGE到X-HTTP-Method屬性中。
另一個在建立、更新和刪除SharePoint物件時需要的重要考慮是如果你使用的不是OAuth來授權你的請求的話,這些操作需要伺服器的請求表單摘要值作為請求頭中X-RequestDigest的值。你可以通過一個空白主體的POST請求到連結http://<siteurl>/_api/contextinfo來獲取這個值(d:FormDigestValue節點),下面的程式碼展示瞭如何通過C#請求contextinfo。
HttpWebRequest endpointRequest =
(HttpWebRequest)HttpWebRequest.Create(
"http://<site url>/_api/contextinfo");
endpointRequest.Method = "POST";
endpointRequest.Accept = "application/json;odata=verbose";
HttpWebResponse endpointResponse =
(HttpWebResponse)endpointRequest.GetResponse();
如果你使用了指令碼跨域庫,SP.RequestExecutor會負責獲取和傳送摘要值。如果你建立的是SharePoint託管的Add-in,你就不需要建立額外的HTTP請求來獲取表單摘要值了,你可以通過在SharePoint頁面上通過指令碼來獲取,如下程式碼,使用JQuery來建立一個列表。
jQuery.ajax({
url: "http://<site url>/_api/web/lists",
type: "POST",
data: JSON.stringify({ '__metadata': { 'type': 'SP.List' }, 'AllowContentTypes': true,
'BaseTemplate': 100, 'ContentTypesEnabled': true, 'Description': 'My list description', 'Title': 'Test' }
),
headers: {
"accept": "application/json;odata=verbose",
"content-type": "application/json;odata=verbose",
"content-length": <length of post body>,
"X-RequestDigest": $("#__REQUESTDIGEST").val()
},
success: doSuccess,
error: doError
});
下面的示例展示瞭如何更新上面建立的列表,更新了列表的標題。jQuery.ajax({
url: "http://<site url>/_api/web/lists/GetByTitle('Test')",
type: "POST",
data: JSON.stringify({ '__metadata': { 'type': 'SP.List' }, 'Title': 'New title' }),
headers: {
"X-HTTP-Method":"MERGE",
"accept": "application/json;odata=verbose",
"content-type": "application/json;odata=verbose",
"content-length": <length of post body>,
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"IF-MATCH": "*"
},
success: doSuccess,
error: doError
});
下面的程式碼展示瞭如何建立一個網站。
jQuery.ajax({
url: "http://<site url>/_api/web/webinfos/add",
type: "POST",
data: JSON.stringify(
{'parameters': {
'__metadata': {'type': 'SP.WebInfoCreationInformation' },
'Url': 'RestSubWeb',
'Title': 'RestSubWeb',
'Description': 'REST created web',
'Language':1033,
'WebTemplate':'sts',
'UseUniquePermissions':false}
}
),
headers: {
"accept": "application/json; odata=verbose",
"content-type":"application/json;odata=verbose",
"content-length": <length of post body>,
"X-RequestDigest": $("#__REQUESTDIGEST").val()
},
success: doSuccess,
error: doError
});
相關文章
- SharePoint REST API - 基本操作(二)RESTAPI
- SharePoint REST API - 一個請求批量操作RESTAPI
- SharePoint REST API - OData查詢操作RESTAPI
- SharePoint REST API - 概述RESTAPI
- SharePoint REST API - 使用REST API和jQuery上傳一個檔案RESTAPIjQuery
- linq and rest api in sharepointRESTAPI
- SharePoint REST API - 同步SharePoint列表項RESTAPI
- SharePoint REST API - 確定REST端點URLRESTAPI
- SharePoint REST API - 列表和列表項RESTAPI
- SharePoint REST API - REST請求導航的資料結構RESTAPI求導資料結構
- SharePoint REST API - 資料夾和檔案RESTAPI
- SharePoint REST API - 使用REST介面對列表設定自定義許可權RESTAPI
- rest apiRESTAPI
- 筆記三:基本概念-文件、索引和 REST API筆記索引RESTAPI
- ASP.NET Web API與Rest web api(一)ASP.NETWebAPIREST
- GraphQL API vs REST APIAPIREST
- Elasticsearch(二)——Rest APIElasticsearchRESTAPI
- Spark REST API & metricsSparkRESTAPI
- ElasticSearch的Java Api基本操作入門指南ElasticsearchJavaAPI
- [譯 ] 如何使用 AJAX 和 REST API 建立一個圖表(How To Make A Chart Using AJAX & REST API's)RESTAPI
- 在REST API中支援批次操作的幾個不同方法 - mscharhagRESTAPI
- REST : rest_framework.decorators.api_view 實現PATCHRESTFrameworkAPIView
- git的基本操作(一)Git
- http REST API 驗證庫HTTPRESTAPI
- 利用OpenStack Rest API 建立映象RESTAPI
- 撰寫合格的REST APIRESTAPI
- Rest API 的那些事兒RESTAPI
- REST API 最佳入門指南RESTAPI
- 【Azure API 管理】解決呼叫REST API操作APIM(API Management)需要認證問題(Authentication failed, The 'Authorization' header is missing)APIRESTAIHeader
- SharePoint 常用操作雜談
- Django REST framework API 指南(21):SchemasDjangoRESTFrameworkAPI
- Django REST framework API 指南(8):渲染DjangoRESTFrameworkAPI
- Django REST framework API 指南(6):路由DjangoRESTFrameworkAPI路由
- Django REST framework API 指南(7):解析DjangoRESTFrameworkAPI
- Django REST framework API 指南(15):限流DjangoRESTFrameworkAPI
- 5個REST API安全準則RESTAPI
- REST API的五種規則RESTAPI
- 安息吧 REST API,GraphQL 長存RESTAPI