SharePoint Evolutions 2015 - Moving from SOAP to REST
-
Upload
marc-anderson -
Category
Technology
-
view
3.347 -
download
0
Transcript of 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
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
Contact InformationEmail [email protected]
Twitter @sympmarc
Blog http://sympmarc.com
SPServices http://spservices.codeplex.com
SPXSLT http://spxslt.codeplex.com
Books http://sympmarc.com/books
The Middle Tier Manifesto http://bit.ly/middletier
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.
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
Services Across SharePoint Versions
SOAP REST
Deprecated
Deprecated
REST Endpoint
/_vti_bin/listdata.svc
/_api
SOAP Services
Source: https://spservices.codeplex.com/wikipage?title=$().SPServices
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
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
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
How Does SOAP Map to REST?
SO
AP
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.
Generic Read Function
SPServices: XML vs. JSONJS
ON
SPG
etL
istI
tem
sJso
n
XM
LG
etL
istI
tem
s
REST: JSONJS
ON
RE
ST
Demo
We’ll look at a live example showing the different ways we can request data, along with the conversion approaches.
Resources
SharePoint 2013 – CRUD on List Items Using REST Services & jQuery
Get started with the SharePoint 2013 REST service
Working with lists and list items with REST
Use OData query operations in SharePoint REST requests
Thank you for attending!
Marc D Anderson