18
Moving from SOAP to Rest: You’ve Got to Do It Sometime Marc D Anderson President Sympraxis Consulting LLC

SharePoint Evolutions 2015 - Moving from SOAP to REST

Embed Size (px)

Citation preview

Page 1: SharePoint Evolutions 2015 - Moving from SOAP to REST

Moving from SOAP to Rest: You’ve Got to Do It Sometime

Marc D AndersonPresidentSympraxis Consulting LLC

Page 2: SharePoint Evolutions 2015 - Moving from SOAP to REST

Who Is Marc? Co-Founder and President of Sympraxis

Consulting LLC, located in the Boston suburb of Newton, MA, USA. Sympraxis focuses on enabling collaboration throughout the enterprise using the SharePoint application platform.

Over 30 years of experience in technology professional services and software development. Over a wide-ranging career in consulting as well as line manager positions, Marc has proven himself as a problem solver and leader who can solve difficult technology problems for organizations across a wide variety of industries and organization sizes.

Author of SPServices Awarded Microsoft MVP for SharePoint Server

2011-2015

Page 4: SharePoint Evolutions 2015 - Moving from SOAP to REST

Session Overview If you’ve been developing client side

applications or functionality using SPServices and the SOAP Web Services, sooner or later you’ll want to move to REST instead.

This session takes the patterns shown in my article series on ITUnity and my blog and makes it real with real-world examples. There are some things you can do now to prepare for this eventuality, whether it’s part of an upgrade to SharePoint 2013 or simply because you’ve got “legacy” code that uses SOAP instead of REST.

We’ll go through the decision points, specific code examples, and better practices.

Page 5: SharePoint Evolutions 2015 - Moving from SOAP to REST

Why Move from SOAP to REST? SOAP

Simple Object Access Protocol Created 1998 by Dave Winer et al for

Microsoft Discoverability via WSDL XML-based

REST Representational State Transfer Odata protocols JSON Much wider usage

Sources: http://en.wikipedia.org/wiki/SOAP#History, http://en.wikipedia.org/wiki/Representational_state_transfer

Page 6: SharePoint Evolutions 2015 - Moving from SOAP to REST

Services Across SharePoint Versions

SOAP REST

Deprecated

Deprecated

REST Endpoint

/_vti_bin/listdata.svc

/_api

Page 7: SharePoint Evolutions 2015 - Moving from SOAP to REST

SOAP Services

Source: https://spservices.codeplex.com/wikipage?title=$().SPServices

Page 8: SharePoint Evolutions 2015 - Moving from SOAP to REST

Conversion Approaches

Abstract data access (SPServices) calls

Get familiar with promisesBegin using JSONConvert individual calls – mix and

matchStart new development with REST –

spackle with CSOM or SOAP

Page 9: SharePoint Evolutions 2015 - Moving from SOAP to REST

Abstract Data Access$.fn.TasksApp.Tasks.delete = function(options) {

 

var opt = $.extend({}, {

task: null

}, $.fn.TasksApp.defaults, options);

 

var result = $.Deferred();

 

var p = $().SPServices({

operation: "UpdateListItems",

listName: opt.tasksList,

batchCmd: "Delete",

ID: opt.task.ID

});

 

p.done(function() {

 

var errorCode = $(p.responseXML).find("Result > ErrorCode").text();

 

if (errorCode === "0x00000000") {

// Success

 

result.resolveWith(opt.task.ID);

} else {

// Something went wrong

result.resolveWith(-1);

}

 

});

 

return result.promise();

 

}; // End $.fn.TasksApp.Tasks.delete

SO

AP

Page 10: SharePoint Evolutions 2015 - Moving from SOAP to REST

Replace When Ready$.fn.TasksApp.Tasks.delete = function(options) {

 

var opt = $.extend({}, {

task: null

}, $.fn.TasksApp.defaults, options);

 

var result = $.Deferred();

 

var p = $().SPServices({

operation: "UpdateListItems",

listName: opt.tasksList,

batchCmd: "Delete",

ID: opt.task.ID

});

 

p.done(function() {

 

var errorCode = $(p.responseXML).find("Result > ErrorCode").text();

 

if (errorCode === "0x00000000") {

// Success

 

result.resolveWith(opt.task.ID);

} else {

// Something went wrong

result.resolveWith(-1);

}

 

});

 

return result.promise();

 

}; // End $.fn.TasksApp.Tasks.delete

$.fn.TasksApp.Tasks.delete = function(options) {

 

var opt = $.extend({}, {

task: null

}, $.fn.TasksApp.defaults, options);

 

var result = $.Deferred();

 

var p = $.ajax({

url: "http://siteurl/_api/web/lists/GetByTitle('Tasks')/items(" + opt.task.ID +

")",

method: "POST",

headers: {

Authorization: "Bearer " + accessToken

X-RequestDigest: form digest value

"IF-MATCH": etag or "*"

"X-HTTP-Method":"DELETE"}

});

 

p.done(function() {

 

var errorCode = $(p.responseXML).find("Result > ErrorCode").text();

 

if (errorCode === "0x00000000") {

// Success

 

result.resolveWith(opt.ID);

} else {

// Something went wrong

result.resolveWith(-1);

}

 

});

 

return result.promise();

 

}; // End $.fn.TasksApp.tasks.delete

SO

AP

REST

Page 11: SharePoint Evolutions 2015 - Moving from SOAP to REST

How Does SOAP Map to REST?

SO

AP

REST

Page 12: SharePoint Evolutions 2015 - Moving from SOAP to REST

Mapping GetListItems: The Nitty-Gritty

SOAP Option(SPServices synonym)

REST Comments

ViewFields (CAMLViewFields)

$select Choose the columns you would like to retrieve. With both SOAP and REST we get some data we don’t explicitly request, but by specifying only the columns we need we can reduce the payload sizes.

Query(CAMLQuery)

$filter, $orderby

Specify which items in the list we would like to return and how we would like them sorted.

RowLimit(CAMLRowLimit)

$limit Say how many items matching the Query we would like to receive. In SOAP we can specify 0 to get all matching items; in REST we can omit the parameter to get all the matching items. Otherwise, we can specify any integer as the limit.

ViewName (CAMLViewName)

NA ViewName lets you choose the view you would like to get in the response. There’s no REST equivalent here. I’ve always discouraged using this option in SOAP because it’s too easy to change the view settings and cause unintended consequences.

QueryOptions (CAMLQueryOptions)

NA In SOAP, this lets us specify some options that change how the data is returned to us. For example, we can ask for all of the attachment URLs rather than just a Boolean which tells us that there are attachments.

NA $expand This option in REST has no direct equivalent in SOAP. $expand allows us to indicate that we would like the values for a relationship - rather than just the indices - using a projection. This is important with Lookup columns and Person or Group columns.

Page 13: SharePoint Evolutions 2015 - Moving from SOAP to REST

Generic Read Function

Page 14: SharePoint Evolutions 2015 - Moving from SOAP to REST

SPServices: XML vs. JSONJS

ON

SPG

etL

istI

tem

sJso

n

XM

LG

etL

istI

tem

s

Page 15: SharePoint Evolutions 2015 - Moving from SOAP to REST

REST: JSONJS

ON

RE

ST

Page 16: SharePoint Evolutions 2015 - Moving from SOAP to REST

Demo

We’ll look at a live example showing the different ways we can request data, along with the conversion approaches.

Page 18: SharePoint Evolutions 2015 - Moving from SOAP to REST

Thank you for attending!

Marc D Anderson