수색…


비고

REST 서비스 엔드 포인트 URL

REST 클라이언트 액세스 API는 SharePoint 2010에 처음 도입되었지만 SharePoint 2013에서 크게 확장되었습니다. SharePoint 2010 의 REST API는 /_vti_bin/ListData.svc URL의 ListData 웹 서비스를 통해 액세스됩니다. SharePoint 2013 에는 /_api/lists//_api/web 끝점 URL이 도입되어 약간 다르게 동작합니다.

위의 끝점 URL 앞에는 http://server/site 가 와야합니다 http://server/site 여기서 serverserver 의 이름을 나타내고 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)
웹 가져 오기 : (이에 해당하지 않음) /_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 )를 선택할 수도 있습니다.

자바 스크립트

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);
        }
    });
    }

개별 목록 항목 가져 오기

자바 스크립트

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 라는 필드 만 반환합니다. 단 하나의 AJAX 호출에서 이러한 항목을 확장하려면 URL 매개 변수에 몇 가지 추가 마크 업이 필요합니다.

이 예제는 조회 열 이상에 적용됩니다. People/Groups 열을 사용하는 경우 본질적으로 조회 만하므로 Title , EMail 및 기타 항목을 쉽게 가져올 수 있습니다.

예제 코드

중요 참고 : 조회 열에서 되돌아 가려는 필드를 정의 할 때 필드 이름 앞에 원래 테이블의 조회 필드 이름을 붙여야합니다. 예를 들어 조회 열에서 NumLegs 특성을 다시 가져 오려면 Type/NumLegs 해야합니다.

자바 스크립트

// 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 사용하기

2010 년
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
});
2013 년
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 사용하기

2010 년
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);
2013 년
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를 사용하여 페이징을 시뮬레이트하려면 다음을 수행 할 수 있습니다.

  1. $orderby 매개 변수에 따라 처음 n 항목을 건너 $skip=n 려면 $skip=n 매개 변수를 사용하십시오.

  2. $top=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 설정합니다. 새 목록 항목을 나타내는 JSON 객체를 문자열로 serialize하고이 값을 요청 본문에 추가합니다. 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 동사를 사용하여 HTTP 요청을 작성하십시오. 엔터티를 GET의 대상으로 추가 할 목록 항목의 서비스 URL을 사용하십시오. 콘텐츠 유형을 application/json 설정합니다. 자바 스크립트 예제 :

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 요청을 만듭니다. 값이 MERGEX-HTTP-Method 헤더를 추가하십시오. 업데이트 할 목록 항목의 서비스 URL을 POST 대상으로 사용 If-Match 헤더에 엔터티의 원래 ETag 또는 * 값을 추가합니다. 자바 스크립트 예제 :

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 요청을 만듭니다. 값이 DELETEX-HTTP-Method 헤더를 추가하십시오. 업데이트 할 목록 항목의 서비스 URL을 POST 대상으로 사용 If-Match 헤더에 엔터티의 원래 ETag 값을 추가합니다. 자바 스크립트 예제 :

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));
  }
);


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow