sharepoint
RESTサービス
サーチ…
備考
RESTサービスのエンドポイントURL
RESTクライアントアクセスAPIは、SharePoint 2010で初めて導入されましたが、SharePoint 2013では大幅に拡張されました。SharePoint 2010のREST APIは、 /_vti_bin/ListData.svc
URLのListData Webサービスからアクセスされます 。 SharePoint 2013では/_api/lists/
および/_api/web
エンドポイントURLが導入されました。これらのURLは若干動作が異なります。
上記のエンドポイントURLはが先行されなければならないhttp://server/site
server
サーバーの名前を表し、 site
の名前、または特定のサイトへのパスを表します。
のURLの例 | SharePoint 2010 | SharePoint 2013 |
---|---|---|
リストを取得する: | /_vti_bin/ListData.svc/ListName | /_api/lists('ListGuid') |
アイテムを取得する: | /_vti_bin/ListData.svc/ListName(1) | /_api/lists('ListGuid')/items(1) |
Webを取得する: | (同等品) | /_api/web |
リストとリストアイテムへのアクセスの違いにもかかわらず、それらの結果を扱う作業は両方のバージョンで非常に似ています。
ListData.svc
サービスは、後方互換性のためにSharePoint 2013で引き続き使用できます。
REST要求の送信
RESTリクエストは、ネイティブJavaScript XMLHttpRequestまたはjQuery AJAXラッパー構造を介して送信できます。
XMLHttpRequestの構文
var xhr = new XMLHttpRequest();
xhr.open(verb, url, true);
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(data);
jQuery AJAXの構文
$.ajax({
method: verb,
url: url,
headers: { "Content-Type":"application/json" },
data: data
});
AJAX経由でリクエストを送信する方法の詳細については、JavaScript AJAXのドキュメントを参照してください。
リストの操作
リストアイテムの取得
この例では、すべてのリストアイテムを取得し、それらのアイテムを反復処理する方法を示します。 top
パラメーターを使用して、特定の数の結果を要求することができます。 select
パラメータを使用して特定のフィールド( $select=id, Title, uri
)を選択することもselect
ます。
JavaScript
function GetListItems(){
$.ajax({
url: "../_api/web/lists/getbytitle('List Title')/items?$top=50"
contentType: "application/json;odata=verbose",
method: "GET",
headers: { "accept": "application/json;odata=verbose" },
success: function (data) {
$.each(data.d.results, function(index,item){
//use item to access the individual list item
console.log(item.Id);
});
},
error: function(error){
console.log(error);
}
});
}
個々のリスト項目を取得する
JavaScript
function GetListItem(){
$.ajax({
url: "../_api/web/lists/getbytitle('List Title')/items(1)",
contentType: "application/json;odata=verbose",
method: "GET",
headers: { "accept": "application/json;odata=verbose" },
success: function (data) {
console.log(data.d.Id);
},
error: function(error){
console.log(error);
}
});
}
ルックアップ列を持つリストアイテムを取得する
場合によっては、次のようなリスト構造を持つことがあります。
動物リスト表
名 | タイプ | 説明 |
---|---|---|
タイトル | 文字列(テキスト) | 動物の名前 |
年齢 | 数 | 動物の年齢 |
値 | 通貨 | 動物の価値 |
タイプ | ルックアップ(動物型テーブル) | ルックアップフィールド(動物型テーブルからの選択肢のドロップダウン) |
動物型テーブル
名 | タイプ | 説明 |
---|---|---|
タイトル | 文字列(テキスト) | 種/動物種の名称(例:ブタ) |
NumLegs | 数 | 動物の足の数 |
恐らく最も深刻な例ではないかもしれませんが、ここの問題は依然として有効です。 SharePointリストから値を取得するために通常のリクエストを使用する場合、動物のType
については、JSONレスポンスにTypeId
というフィールドしか返されません。これらの項目を1回のAJAX呼び出しで拡張するには、URLパラメータに余分なマークアップが必要です。
この例は、参照列以外のものにも適用されます。 People/Groups
カラムを使用している場合は、基本的にはルックアップだけなので、 Title
、 EMail
などのアイテムを簡単にEMail
できます。
コード例
重要な注意 :ルックアップ列から戻すフィールドを定義するときは、元のテーブルのルックアップフィールドの名前をフィールド名の前に付ける必要があります。たとえば、ルックアップ列からNumLegs
属性をNumLegs
場合は、「 Type/NumLegs
する必要があります。
JavaScript
// webUrl: The url of the site (ex. https://www.contoso.com/sites/animals)
// listTitle: The name of the list you want to query
// selectFields: the specific fields you want to get back
// expandFields: the name of the fields that need to be pulled from lookup tables
// callback: the name of the callback function on success
function getItems(webUrl,listTitle,selectFields, expandFields, callback){
var endpointUrl = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/items";
endpointUrl+= '?$select=' + selectFields.join(",");
endpointUrl+= '&$expand=' + expandFields.join(",");
return executeRequest(endpointUrl,'GET', callback);
}
function executeRequest(url,method,callback,headers,payload)
{
if (typeof headers == 'undefined'){
headers = {};
}
headers["Accept"] = "application/json;odata=verbose";
if(method == "POST") {
headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
}
var ajaxOptions =
{
url: url,
type: method,
contentType: "application/json;odata=verbose",
headers: headers,
success: function (data) { callback(data) }
};
if(method == "POST") {
ajaxOptions.data = JSON.stringify(payload);
}
return $.ajax(ajaxOptions);
}
// Setup the ajax request by setting all of the arguments to the getItems function
function getAnimals() {
var url = "https://www.contoso.com/sites/animals";
var listTitle = "AnimalListing";
var selectFields = [
"Title",
"Age",
"Value",
"Type/Title",
"Type/NumLegs"
];
var expandFields = [
"Type/Title",
"Type/NumLegs"
];
getItems(url, listTitle, selectFields, expandFields, processAnimals);
}
// Callback function
// data: returns the data given by SharePoint
function processAnimals(data) {
console.log(data);
// Process data here
}
// Start the entire process
getAnimals();
複数値の参照フィールドに選択項目を追加する
この例では、ルックアップ列の名前がMultiLookupColumnName
で、マルチルックアップフィールドをID 1と2の項目を参照するように設定すると仮定しています。
jQuery AJAXの使用
var listName = "YourListName";
var lookupList = "LookupListName";
var idOfItemToUpdate = 1;
var url = "/server/site/_vti_bin/ListData.svc/"+listName+"("+idOfItemToUpdate+")";
var data = JSON.stringify({
MultiLookupColumnName:[
{__metadata:{uri:"http://yoursiteurl/_vti_bin/ListData.svc/"+lookupList+"(1)"}},
{__metadata:{uri:"http://yoursiteurl/_vti_bin/ListData.svc/"+lookupList+"(2)"}}
]
});
$.ajax({
method: 'POST',
url: url,
contentType: 'application/json',
headers: {
"X-HTTP-Method" : "MERGE",
"If-Match" : "*"
},
data: data
});
var listGuid = "id-of-list-to-update"; // use list GUID here
var lookupGuid = "id-of-lookup-list"; // use lookup list GUID here
var idOfItemToUpdate = 1;
var url = "/server/site/_api/lists('"+ listGuid + "')/items("+ idOfItemToUpdate + ")";
var data = JSON.stringify({
MultiLookupColumnName:[
{__metadata:{uri:"http://yoursiteurl/_api/lists('" + lookupGuid + "')/items(1)"}},
{__metadata:{uri:"http://yoursiteurl/_api/lists('" + lookupGuid + "')/items(2)"}}
]
});
$.ajax({
method: 'POST',
url: url,
contentType: 'application/json',
headers: {
"X-HTTP-Method" : "MERGE",
"If-Match" : "*"
},
data: data
});
XMLHttpRequestの使用
var listName = "YourListName";
var lookupList = "LookupListName";
var idOfItemToUpdate = 1;
var url = "/server/site/_vti_bin/ListData.svc/YourListName("+idOfItemToUpdate+")";
var data = JSON.stringify({
MultiLookupColumnName:[
{__metadata:{uri:"http://yoursiteurl/_vti_bin/ListData.svc/"+lookupList+"(1)"}},
{__metadata:{uri:"http://yoursiteurl/_vti_bin/ListData.svc/"+lookupList+"(2)"}}
]
});
var xhr = new XMLHttpRequest();
xhr.open("POST",url,true);
xhr.setRequestHeader("X-HTTP-Method", "MERGE");
xhr.setRequestHeader("If-Match", "*");
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(data);
var listGuid = "id-of-list-to-update";
var lookupGuid = "id-of-lookup-list";
var idOfItemToUpdate = 1;
var url = "/server/site/_api/lists('"+ listGuid + "')/items("+ idOfItemToUpdate + ")";
var data = JSON.stringify({
MultiLookupColumnName:[
{__metadata:{uri:"http://yoursiteurl/_api/lists('" + lookupGuid + "')/items(1)"}},
{__metadata:{uri:"http://yoursiteurl/_api/lists('" + lookupGuid + "')/items(2)"}}
]
});
var xhr = new XMLHttpRequest();
xhr.open("POST",url,true);
xhr.setRequestHeader("X-HTTP-Method", "MERGE");
xhr.setRequestHeader("If-Match", "*");
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(data);
クエリから返されたリストアイテムのページング
RESTを使用してページングをシミュレートするには、次のようにします。
$orderby
パラメータに従って最初のn
エントリをスキップするには、$skip=n
パラメータを使用します$top=n
パラメータを使用して、$orderby
および$skip
パラメータに従って上位n
エントリを返します。
var endpointUrl = "/_api/lists('guid')/items"; // SP2010: "/_vti_bin/ListData.svc/ListName";
$.getJSON(
endpointUrl + "?$orderby=Id&$top=1000",
function(data){
processData(data); // you can do something with the results here
var count = data.d.results.length;
getNextBatch(count, processData, onComplete); // fetch next page
}
);
function getNextBatch(totalSoFar, processResults, onCompleteCallback){
$.getJSON(
endpointUrl + "?$orderby=Id&$skip="+totalSoFar+"&$top=1000",
function(data){
var count = data.d.results.length;
if(count > 0){
processResults(data); // do something with results
getNextBatch(totalSoFar+count, callback); // fetch next page
}else{
onCompleteCallback();
}
}
);
}
SharePointリストで新しく作成されたアイテムのIDを取得する
この例は、SharePoint REST APIを使用して新しく作成されたアイテムのIDを取得する方法を示しています。
注意 :
listName - この変数にはあなたのリストの名前が含まれます。
newItemBody - これは、リストに新しいアイテムを追加するためのリクエストボディです。
例:var newItemBody = {__metadata:{'type': 'SP.Data.MyListNameItem'}、タイトル: 'Some title value'};
function CreateListItemWithDetails(listName, newItemBody) {
var item = newItemBody;
return $.ajax({
url: _spPageContextInfo.siteAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items",
type: "POST",
contentType: "application/json;odata=verbose",
data: JSON.stringify(item),
headers: {
"Accept": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"content-Type": "application/json;odata=verbose"
}
});
}
CreateListItemWithDetails(listName, newItemBody)
.then(function(data){
//success callback
var NewlyCreatedItemId = data.d.ID;
}, function(data){
//failure callback
});
SharePoint 2010 RESTインターフェイスを使用してCRUD操作を実行する方法
作成する
RESTを使用してCreate操作を実行するには、次の操作を実行する必要があります。
POST
動詞を使用してHTTP要求を作成します。 POSTの対象としてエンティティを追加するリストのサービスURLを使用します。コンテンツタイプをapplication/json
設定しapplication/json
。新しいリスト項目を表すJSONオブジェクトを文字列としてシリアル化し、この値をリクエスト本体に追加します。JavaScriptの例:
function createListItem(webUrl,listName, itemProperties, success, failure) {
$.ajax({
url: webUrl + "/_vti_bin/listdata.svc/" + listName,
type: "POST",
processData: false,
contentType: "application/json;odata=verbose",
data: JSON.stringify(itemProperties),
headers: {
"Accept": "application/json;odata=verbose"
},
success: function (data) {
success(data.d);
},
error: function (data) {
failure(data.responseJSON.error);
}
});
}
使用法
var taskProperties = {
'TaskName': 'Order Approval',
'AssignedToId': 12
};
createListItem('https://contoso.sharepoint.com/project/','Tasks',taskProperties,function(task){
console.log('Task' + task.TaskName + ' has been created');
},
function(error){
console.log(JSON.stringify(error));
}
);
読む
REST経由で読み取り操作を実行するには、次の操作を実行する必要があります。
GET
verbを使用してHTTP要求を作成します。 GETの対象としてエンティティを追加するリスト項目のサービスURLを使用します。コンテンツタイプをapplication/json
設定しapplication/json
。 JavaScriptの例:
function getListItemById(webUrl,listName, itemId, success, failure) {
var url = webUrl + "/_vti_bin/listdata.svc/" + listName + "(" + itemId + ")";
$.ajax({
url: url,
method: "GET",
headers: { "Accept": "application/json; odata=verbose" },
success: function (data) {
success(data.d);
},
error: function (data) {
failure(data.responseJSON.error);
}
});
}
使用法
getListItemById('https://contoso.sharepoint.com/project/','Tasks',2,function(taskItem){
console.log(taskItem.TaskName);
},
function(error){
console.log(JSON.stringify(error));
}
);
更新
既存のエンティティを更新するには、次の操作を実行する必要があります。
POST
動詞を使用してHTTP要求を作成します。値がMERGE
X-HTTP-Method
ヘッダーを追加しX-HTTP-Method
。更新するリスト項目のサービスURLをPOSTのターゲットとして使用するIf-Match
ヘッダーにエンティティの元のETagまたは*の値を追加します。 JavaScriptの例:
function updateListItem(webUrl,listName,itemId,itemProperties,success, failure)
{
getListItemById(webUrl,listName,itemId,function(item){
$.ajax({
type: 'POST',
url: item.__metadata.uri,
contentType: 'application/json',
processData: false,
headers: {
"Accept": "application/json;odata=verbose",
"X-HTTP-Method": "MERGE",
"If-Match": item.__metadata.etag
},
data: Sys.Serialization.JavaScriptSerializer.serialize(itemProperties),
success: function (data) {
success(data);
},
error: function (data) {
failure(data);
}
});
},
function(error){
failure(error);
});
}
使用法
var taskProperties = {
'TaskName': 'Approval',
'AssignedToId': 12
};
updateListItem('https://contoso.sharepoint.com/project/','Tasks',2,taskProperties,function(item){
console.log('Task has been updated');
},
function(error){
console.log(JSON.stringify(error));
}
);
削除
エンティティを削除するには、次の操作を実行する必要があります。
POST
動詞を使用してHTTP要求を作成します。値がDELETE
X-HTTP-Method
ヘッダーを追加しX-HTTP-Method
。更新するリスト項目のサービスURLをPOSTのターゲットとして使用するIf-Match
ヘッダーにエンティティの元のETagの値を追加します。 JavaScriptの例:
function deleteListItem(webUrl, listName, itemId, success, failure) {
getListItemById(webUrl,listName,itemId,function(item){
$.ajax({
url: item.__metadata.uri,
type: "POST",
headers: {
"Accept": "application/json;odata=verbose",
"X-Http-Method": "DELETE",
"If-Match": item.__metadata.etag
},
success: function (data) {
success();
},
error: function (data) {
failure(data.responseJSON.error);
}
});
},
function (error) {
failure(error);
});
}
使用法
deleteListItem('https://contoso.sharepoint.com/project/','Tasks',3,function(){
console.log('Task has been deleted');
},
function(error){
console.log(JSON.stringify(error));
}
);