SlideShare a Scribd company logo
Moving from SOAP to Rest:
You’ve Got to Do It
Sometime
Marc D Anderson
President
Sympraxis 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 Information
Email marc.anderson@sympraxisconsulting.com
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 promises
 Begin using JSON
 Convert individual calls – mix and match
 Start 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
SOAP
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
How Does SOAP Map to REST?
SOAPREST
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. JSON
JSON
SPGetListItemsJson
XML
GetListItems
REST: JSON
JSON
REST
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

More Related Content

PPTX
SPTechCon Dev Days SFO 2015 - Moving from SOAP to REST
PPTX
SharePoint Tech Fest Houston 2015 - Moving from SOAP to REST
ODT
Rest With Json Vs Soap With Xml
PPTX
Introduction to WebServices
PPT
PPTX
Mulesoft salesforce connector to update Object.
PPTX
SharePoint Tech Fest Houston 2015 - Creating a Great User Experience in Share...
PPTX
SharePoint and jQuery Essentials
SPTechCon Dev Days SFO 2015 - Moving from SOAP to REST
SharePoint Tech Fest Houston 2015 - Moving from SOAP to REST
Rest With Json Vs Soap With Xml
Introduction to WebServices
Mulesoft salesforce connector to update Object.
SharePoint Tech Fest Houston 2015 - Creating a Great User Experience in Share...
SharePoint and jQuery Essentials

Similar to SharePoint Evolutions 2015 - Moving from SOAP to REST (20)

PPTX
Collab365 Oct 2015 - Moving from SOAP to REST – You’ll Have to Do It Sometime
PPTX
SharePoint Saturday Boston 2015 - Moving from SOAP to REST
PPTX
SharePoint REST vs CSOM
PPTX
Understanding and programming the SharePoint REST API
PPTX
SharePoint Data Anywhere and Everywhere by Chris Beckett - SPTechCon
PPTX
Develop iOS and Android apps with SharePoint/Office 365
PPTX
SharePoint 2013 - What's New
PPTX
Rest API and Client OM for Developer
PPTX
SharePoint & jQuery Guide - SPSTC 5/18/2013
PDF
Building windows8 modern app for sp2013
PPTX
Intro to SharePoint Web Services
PPTX
Getting Enough REST? Understanding the SharePoint 2013 REST / ODATA Services
PDF
Hard learned CSOM and REST tips
PDF
Comsharepoint2013pdf
DOC
Sharepoint 2010 content
PPTX
2012 12 best of spc - moving to the sp2013 app model
PDF
Getting started with SharePoint REST API in custom SharePoint workflows Resto...
PPTX
Introduction to the SharePoint 2013 REST API
PPTX
Share point development 101
PPTX
What's new for Developers in SharePoint 2013
Collab365 Oct 2015 - Moving from SOAP to REST – You’ll Have to Do It Sometime
SharePoint Saturday Boston 2015 - Moving from SOAP to REST
SharePoint REST vs CSOM
Understanding and programming the SharePoint REST API
SharePoint Data Anywhere and Everywhere by Chris Beckett - SPTechCon
Develop iOS and Android apps with SharePoint/Office 365
SharePoint 2013 - What's New
Rest API and Client OM for Developer
SharePoint & jQuery Guide - SPSTC 5/18/2013
Building windows8 modern app for sp2013
Intro to SharePoint Web Services
Getting Enough REST? Understanding the SharePoint 2013 REST / ODATA Services
Hard learned CSOM and REST tips
Comsharepoint2013pdf
Sharepoint 2010 content
2012 12 best of spc - moving to the sp2013 app model
Getting started with SharePoint REST API in custom SharePoint workflows Resto...
Introduction to the SharePoint 2013 REST API
Share point development 101
What's new for Developers in SharePoint 2013
Ad

More from Marc D Anderson (20)

PPTX
SPC2019 - Managing Content Types in the Modern World
PPTX
ECS2019 - Managing Content Types in the Modern World
PPTX
Rencontre Groupe d'usagers SharePoint Montreal - The Next Great Migration - C...
PPTX
RISPUG - Top Form - Using PowerApps to Replace List Forms
PPTX
SPCNA 2018 - Top Form - Using PowerApps to Replace List Forms
PPTX
SPCNA 2018 - The Next Great Migration - Classic to Modern
PPTX
SPS New York City 2017 - The Lay of the Land of Client-Side Development circa...
PPTX
ECS Zagreb 2017 - Content Types - Love Them or Lose It
PPTX
SPS Monaco 2017 - The Lay of the Land of Client-Side Development circa 2017
PPTX
Lions Tigers Teams - SPTechCon Austin 2017
PPTX
Oslo SP User Group - Content Types - Love Them or Lose It
PPTX
Unity Connect Haarlem 2016 - The Lay of the Land of Client-Side Development c...
PPTX
SPTechCon Boston 2016 - Creating a Great User Experience in SharePoint
PPTX
SPTechCon Boston 2016 - Content Types - Love Them or Lose It
PPTX
SPC Adriatics 2016 - Creating a Great User Experience in SharePoint
PPTX
SPC Adriatics 2016 - Alternative Approaches to Solution Development in Office...
PPTX
SharePointFest Konferenz 2016 - Creating a Great User Experience in SharePoint
PPTX
SharePointFest Konferenz 2016 - Alternative Approaches to Solution Developmen...
PPTX
SPTechCon Austin 2016 - Content Types-Love Them or Lose It
PPTX
SPTechCon Austin 2016 - Creating a Great User Experience in SharePoint
SPC2019 - Managing Content Types in the Modern World
ECS2019 - Managing Content Types in the Modern World
Rencontre Groupe d'usagers SharePoint Montreal - The Next Great Migration - C...
RISPUG - Top Form - Using PowerApps to Replace List Forms
SPCNA 2018 - Top Form - Using PowerApps to Replace List Forms
SPCNA 2018 - The Next Great Migration - Classic to Modern
SPS New York City 2017 - The Lay of the Land of Client-Side Development circa...
ECS Zagreb 2017 - Content Types - Love Them or Lose It
SPS Monaco 2017 - The Lay of the Land of Client-Side Development circa 2017
Lions Tigers Teams - SPTechCon Austin 2017
Oslo SP User Group - Content Types - Love Them or Lose It
Unity Connect Haarlem 2016 - The Lay of the Land of Client-Side Development c...
SPTechCon Boston 2016 - Creating a Great User Experience in SharePoint
SPTechCon Boston 2016 - Content Types - Love Them or Lose It
SPC Adriatics 2016 - Creating a Great User Experience in SharePoint
SPC Adriatics 2016 - Alternative Approaches to Solution Development in Office...
SharePointFest Konferenz 2016 - Creating a Great User Experience in SharePoint
SharePointFest Konferenz 2016 - Alternative Approaches to Solution Developmen...
SPTechCon Austin 2016 - Content Types-Love Them or Lose It
SPTechCon Austin 2016 - Creating a Great User Experience in SharePoint
Ad

Recently uploaded (20)

PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Approach and Philosophy of On baking technology
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Electronic commerce courselecture one. Pdf
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Encapsulation theory and applications.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPT
Teaching material agriculture food technology
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Machine learning based COVID-19 study performance prediction
Building Integrated photovoltaic BIPV_UPV.pdf
MYSQL Presentation for SQL database connectivity
Unlocking AI with Model Context Protocol (MCP)
Approach and Philosophy of On baking technology
Spectral efficient network and resource selection model in 5G networks
Network Security Unit 5.pdf for BCA BBA.
Electronic commerce courselecture one. Pdf
The AUB Centre for AI in Media Proposal.docx
Encapsulation theory and applications.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Understanding_Digital_Forensics_Presentation.pptx
Advanced methodologies resolving dimensionality complications for autism neur...
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
Teaching material agriculture food technology
20250228 LYD VKU AI Blended-Learning.pptx
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Machine learning based COVID-19 study performance prediction

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
  • 3. Contact Information Email marc.anderson@sympraxisconsulting.com 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
  • 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
  • 6. Services Across SharePoint Versions SOAP REST Deprecated Deprecated REST Endpoint /_vti_bin/listdata.svc /_api
  • 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
  • 11. How Does SOAP Map to REST? SOAPREST
  • 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.
  • 14. SPServices: XML vs. JSON JSON SPGetListItemsJson XML GetListItems
  • 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
  • 18. Thank you for attending! Marc D Anderson