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.
IAC 2024 - IA Fast Track to Search Focused AI Solutions
SharePoint Evolutions 2015 - Moving from SOAP to REST
1. Moving from SOAP to Rest:
You’ve Got to Do It
Sometime
Marc D Anderson
President
Sympraxis Consulting LLC
2. 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
4. 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.
5. 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
8. Conversion Approaches
Abstract data access (SPServices) calls
Get familiar with promises
Begin using JSON
Convert individual calls – mix and match
Start new development with REST – spackle
with CSOM or SOAP
9. 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
SOAP
10. 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
SOAP
REST
12. 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.
16. We’ll look at a live example showing the different ways we can request
data, along with the conversion approaches.
17. 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