sharepoint
REST-tjänster
Sök…
Anmärkningar
REST Service Endpoint URLs
REST-klientåtkomst-API: et introducerades först i SharePoint 2010, men utökades kraftigt i SharePoint 2013. REST-API: et i SharePoint 2010 nås via ListData-webbtjänsten på /_vti_bin/ListData.svc
url. SharePoint 2013 introducerade /_api/lists/
och /_api/web
endpoint, som uppträder något annorlunda.
Ovanstående slutpunkts-URL: er bör föregås av http://server/site
där server
representerar server
namn, och site
representerar namnet på eller sökvägen till den specifika webbplatsen.
Exempel URL för ... | SharePoint 2010 | SharePoint 2013 |
---|---|---|
Hämtar en lista: | /_vti_bin/ListData.svc/ListName | /_api/lists('ListGuid') |
Hämtar en artikel: | /_vti_bin/ListData.svc/ListName(1) | /_api/lists('ListGuid')/items(1) |
Hämtar en webb: | (ingen motsvarighet) | /_api/web |
Trots skillnaderna i åtkomst till listor och listobjekt är arbetet med dessa resultat mycket likt i båda versionerna.
Observera att tjänsten ListData.svc
fortfarande är tillgänglig i SharePoint 2013 för bakåtkompatibilitet.
Skicka REST-begäranden
En REST-begäran kan skickas via en inbyggd JavaScript XMLHttpRequest eller via jQuery AJAX-omslagskonstruktion.
XMLHttpRequest Syntax
var xhr = new XMLHttpRequest();
xhr.open(verb, url, true);
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(data);
jQuery AJAX Syntax
$.ajax({
method: verb,
url: url,
headers: { "Content-Type":"application/json" },
data: data
});
Mer information om hur du skickar förfrågningar via AJAX finns i JavaScript AJAX-dokumentationen .
Arbeta med listor
Hämta listobjekt
Det här exemplet visar hur du hämtar alla listobjekt och itererar igenom dem. Du kan använda den top
parametern för att begära ett visst antal resultat. Du kan också använda select
att välja vissa fält ( $select=id, Title, uri
).
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);
}
});
}
Få en individuell listobjekt
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);
}
});
}
Hämta listobjekt med sökningskolumner
Ibland kan du ha en liststruktur som ser ut så här:
Djurlistning
namn | Typ | Beskrivning |
---|---|---|
Titel | Sträng (text) | Djurets namn |
Ålder | siffra | Hur gammalt djuret är |
Värde | Valuta | Djurets värde |
Typ | Uppslag (tabell över djurstyper) | Sökfält (ger en nedrullning av val från tabellen över djurstyper) |
Djurstyper
namn | Typ | Beskrivning |
---|---|---|
Titel | Sträng (text) | Arten / djurens namn (ex. Gris) |
NumLegs | siffra | Antal ben på djuret |
Förmodligen inte det allvarligaste exemplet men problemet här är fortfarande giltigt. När du använder den vanliga begäran för att hämta värden från SharePoint-listan, för Type
, får du bara tillbaka ett fält som heter TypeId
i JSON-svaret. För att utöka dessa objekt i bara ett enda AJAX-samtal krävs en extra extra markering i URL-parametrarna.
Detta exempel gäller för mer än bara uppslagskolumner. När du använder kolumner med People/Groups
är de i princip bara uppslag, så att du enkelt kan dra objekt som Title
, e- EMail
och andra.
Exempelkod
Viktig anmärkning : När du definierar fälten som du vill komma tillbaka från kolumnerna i sökningen måste du prefixera namnet på fältet med namnet på sökfältet i den ursprungliga tabellen. Om du till exempel vill få tillbaka attributet NumLegs
från uppslagskolumnen måste du skriva 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();
Lägga till val i ett flerfunktionsuppslagfält
I det här exemplet antas att din MultiLookupColumnName
heter MultiLookupColumnName
och att du vill ställa in ditt fleruppslagningsfält för att leta upp till objekt med ID 1 och 2.
Använda 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
});
Använda 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);
Objekt med sökningslistor returnerade från en fråga
För att simulera sökning med REST kan du göra följande:
Använd parametern
$skip=n
att hoppa över de förstan
posterna enligt parametern$orderby
Använd parametern
$top=n
att returnera de överstan
posterna enligt$orderby
och$skip
.
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();
}
}
);
}
Hämta ett ID för nyskapat objekt i SharePoint-listan
Detta exempel visar hur man hämtar ett ID för ett nyskapat objekt med SharePoint REST API.
Notera :
listnamn - Denna variabel innehåller namnet på din lista.
newItemBody - Detta kommer att vara din förfrågningsorgan för att lägga till ett nytt objekt i listan.
t.ex. var newItemBody = {__metadata: {'type': 'SP.Data.MyListNameItem'}, Titel: 'Viss titelvärde'};
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
});
Hur man utför CRUD-operationer med hjälp av SharePoint 2010 REST Interface
Skapa
För att utföra en Skapa operation via REST måste du utföra följande åtgärder:
Skapa en HTTP-begäran med POST
verbet. Använd tjänsten URL för listan som du vill lägga till en enhet som mål för POST. Ställ in innehållstypen till application/json
. Serialisera JSON-objekt som representerar dina nya listobjekt som en sträng och lägg till detta värde i JavaScript-exemplet med begäran.
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);
}
});
}
Användande
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));
}
);
Läsa
För att kunna utföra en läsoperation via REST måste du utföra följande åtgärder:
Skapa en HTTP-begäran med GET
verbet. Använd servicewebbadressen för listobjektet som du vill lägga till en enhet som mål för GET. Ställ in innehållstypen till application/json
. JavaScript-exempel:
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);
}
});
}
Användande
getListItemById('https://contoso.sharepoint.com/project/','Tasks',2,function(taskItem){
console.log(taskItem.TaskName);
},
function(error){
console.log(JSON.stringify(error));
}
);
Uppdatering
För att uppdatera en befintlig enhet måste du utföra följande åtgärder:
Skapa en HTTP-begäran med POST
verbet. Lägg till en X-HTTP-Method
metodrubrik med ett värde på MERGE
. Använd tjänsten URL för listobjektet som du vill uppdatera som mål för POST Lägg till en If-Match
rubrik med ett värde för enhetens ursprungliga ETag, eller *. JavaScript-exempel:
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);
});
}
Användande
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));
}
);
Radera
För att radera en enhet måste du utföra följande åtgärder:
Skapa en HTTP-begäran med POST
verbet. Lägg till en X-HTTP-Method
metodrubrik med ett värde DELETE
. Använd servicewebbadressen för listobjektet som du vill uppdatera som mål för POST Lägg till en If-Match
rubrik med ett värde på enhetens ursprungliga ETag. JavaScript-exempel:
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);
});
}
Användande
deleteListItem('https://contoso.sharepoint.com/project/','Tasks',3,function(){
console.log('Task has been deleted');
},
function(error){
console.log(JSON.stringify(error));
}
);