Client Side
Development – REST or
CSOM
Mark Rackley
Solutions Architect

Level: Intermediate
About Mark Rackley

•

•
•
•
•

18+ years software
architecture and
development experience
SharePoint Junkie since
2007
Ev...
Agenda
•

Pre-Game Highlights
– What is CSOM and REST?

•

First Quarter
– API Coverage

•

Second Quarter
– Platforms and...
http://www.pluralsight.com/training/Courses/TableOfContents/
sharepoint-2013-client-object-model-rest

ROB WINDSOR - SHARE...
CLIENT SIDE OBJECT
MODEL (CSOM)
•
•
•
•

Client Side Object Model
Rookie Year:

2010

API used when building
remote applications

Introduced in SharePoint...
JavaScript Client Object Model (JSOM)
context = SP.ClientContext.get_current();
var speakerList = context.get_web().get_li...
SHAREPOINT REST
• Each resource or set of
resources is addressable
•
•
•

http://<site url>/_api/web
http://<site
url>/_api/web/lists
http...
REST Service Access Points
•

Site
– http://server/site/_api/site

•

Web
– http://server/site/_api/web

•

User Profile
–...
SHAREPOINT 2010 REST
var call = $.ajax({
url: "http://<Url To Site>/_vti_bin/listdata.svc/Vendors?$select=Vendor,Id&$top=1...
SHAREPOINT 2013 REST
var call = $.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/Web/Lists/GetByTitle('ListName')/...
REST and CSOM Behind the
Scenes
API Coverage

FIRST QUARTER
REST’s Roster
•
•
•
•

•

Sites, Webs, Features, Event Receivers,
Site Collections
Lists, List Items, Fields, Content Type...
It‟s good!

FIELD GOAL FOR REST!
CSOM’s Roster
•
•

•
•
•
•

•
•
•
•

•

Sites, Webs, Features, Event Receivers, Site
Collections
Lists, List Item s, Field...
And the extra point…. Is good!

TOUCHDOWN CSOM!
0 0:0 0
CSOM

QTR

REST

7

1

3
Platforms and Standards

SECOND QUARTER
REST’s Playbook
“REST is something Roy Fielding wrote back in 2000 that described a
way to share data over HTTP. Unfortuna...
REST’s Playbook
MSDN Magazine - Understanding and Using the
SharePoint 2013 REST Interface
http://msdn.microsoft.com/en-us...
CSOM’s Playbook
.NET, Silverlight, JavaScript

CSOM responds with a field goal!
REST’s Playbook
•

Platform independent
– PHP, Java, JavaScript, .NET, etc.. Etc

•
•

Many Libraries to choose from that
...
0 0:0 0
CSOM

10

REST
QTR

2

9
SPServices

HALF-TIME SHOW!
SPServices
jQuery library that wraps SharePoint‟s .asmx
Web Services in easy to call methods
•
Pros
– Shorter learning cur...
SPServices
$().SPServices({
operation: "GetListItems",
async: true,
listName: "Vendors",
CAMLViewFields: "<ViewFields><Fie...
Ease of Use / Flexibility

THIRD QUARTER
Working with SCOM
CAML
'<Query><Where>' +
'<Or><Or><And><Geq><FieldRef Name="StartDate" /><Value IncludeTimeValue="TRUE"
T...
Working with SCOM
CAML

There‟s a flag on the play
Working with REST
•

Simplified Queries

((StartDate ge „2013-11-01‟ and StartDate le „2013-12-31‟) or
(DueDate ge „2013-1...
Working with REST
Touchdown!!

2 Point Conversion is good!!!
Working with CSOM
Easier learning curve for .NET Devs
Similar to Server Object Model
Compilation in non JavaScript impleme...
It‟s good!

FIELD GOAL FOR CSOM!
0 0:0 0
CSOM

QTR

REST

13

3

17
Batch Processing/Performance

F0URTH QUARTER
CSOM Batch Processing
•
•

Batch Updates
Batch Exception Handling
– One call to server to handle try, catch, finally
CSOM Batch Processing
Batch Insert
function CreateListItems(objArray) {
var itemArray = [];
var clientContext = SP.ClientC...
CSOM Batch Processing
Batch Exception Handling
scope = new SP.ExceptionHandlingScope(context);
var scopeStart = scope.star...
CSOM Batch Processing

TOUCHDOWN!
REST Batch Processing

FUMBLE!
REST vs. CSOM Performance
•

REST is “chattier”
– No batching

•

CSOM returns more data
– Bigger packets

•

REST can ret...
It‟s good!

FIELD GOAL FOR REST!!
0 0:0 0
CSOM

QTR

REST

20

4

20
Anonymous Access

OVERTIME!
http://blogs.msdn.com/b/kaevans/archive/2013/10/24/whatevery-developer-needs-to-know-about-sharepoint-apps-csomand-anonymo...
REST & CSOM Anonymous Access
On-Premises
REST & CSOM Anonymous Access
On-Premises
•

According to Microsoft “Not Advisable”
– Exposes too much information to nosey...
REST & CSOM Anonymous Access
Office 365

Anonymous Access with REST* or CSOM is
not possible in Office 365

*It Depends
CSOM Anonymous
•

Blocked by default
– GetItems and GetChanges on SPLists
– GetChanges and GetSubwebsForCurrentUser on SPW...
REST Anonymous
Search in REST
Waldek Mastykarz - Configuring SharePoint 2013 Search REST
API for anonymous users
http://bl...
FIELD GOAL REST!!!!!!!!

REST WINS!
0 0:0 0
CSOM

QTR

REST

20

OT

23
Game Highlights
CSOM
More API Coverage Than REST
Designed to be similar to .NET
Object Model, more comfortable
for .NET De...
Game Highlights
CSOM

REST

More API Coverage Than REST

NO MORE CAML!

Designed to be similar to .NET
Object Model, more ...
There are no stupid ones…

QUESTIONS??
Upcoming SlideShare
Loading in...5
×

SharePoint REST vs CSOM

5,488

Published on

Heads up competition between REST and CSOM.
Who's going to win???

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total Views
5,488
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
93
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "SharePoint REST vs CSOM"

  1. 1. Client Side Development – REST or CSOM Mark Rackley Solutions Architect Level: Intermediate
  2. 2. About Mark Rackley • • • • • 18+ years software architecture and development experience SharePoint Junkie since 2007 Event Organizer Blogger, Writer, Speaker Bacon aficionado • @mrackley • http://www.sharepointhillbilly.com
  3. 3. Agenda • Pre-Game Highlights – What is CSOM and REST? • First Quarter – API Coverage • Second Quarter – Platforms and Standards • Third Quarter – Ease of Use / Flexibility • Fourth Quarter – Batch Processing / Performance
  4. 4. http://www.pluralsight.com/training/Courses/TableOfContents/ sharepoint-2013-client-object-model-rest ROB WINDSOR - SHAREPOINT 2013 DEVELOPMENT: CLIENT OBJECT MODEL AND REST API.
  5. 5. CLIENT SIDE OBJECT MODEL (CSOM)
  6. 6. • • • • Client Side Object Model Rookie Year: 2010 API used when building remote applications Introduced in SharePoint 2010 Designed to be similar to Server Object Model Three implementations • .NET managed, Silverlight, JavaScript Communication with SharePoint done in batches
  7. 7. JavaScript Client Object Model (JSOM) context = SP.ClientContext.get_current(); var speakerList = context.get_web().get_lists().getByTitle("Vendors"); var camlQuery = SP.CamlQuery.createAllItemsQuery(); this.listItems = speakerList.getItems(camlQuery); context.load(listItems); context.executeQueryAsync(ReadListItemSucceeded, ReadListItemFailed); function ReadListItemSucceeded(sender, args) { var enumerator = listItems.getEnumerator(); var options = "<option value='0'>(None)</option>"; while (enumerator.moveNext()) { var listItem = enumerator.get_current(); var Vendor = listItem.get_item('Vendor'); var ID = listItem.get_id(); options += "<option value='"+ ID +"'>"+Vendor+"</option>"; } $("select[title='<Field Display Name>']").append(options); } function ReadListItemFailed(sender, args) { alert('Request failed. ' + args.get_message() + 'n' + args.get_stackTrace()); }
  8. 8. SHAREPOINT REST
  9. 9. • Each resource or set of resources is addressable • • • http://<site url>/_api/web http://<site url>/_api/web/lists http://<site url>/_api/web/lists/getByTitle( ‘Customers’) • Operations on resources map to HTTP Verbs REST Rookie Year: 2010 Data-centric web services based on the Open Data Protocol (OData) • GET, PUT, POST, DELETE, … • Results from service returned in AtomPub (XML) or JavaScript Object Notation (JSON) format
  10. 10. REST Service Access Points • Site – http://server/site/_api/site • Web – http://server/site/_api/web • User Profile – http:// server/site/_api/SP.UserProfiles.PeopleManager • Search – http:// server/site/_api/search • Publishing – http:// server/site/_api/publishing
  11. 11. SHAREPOINT 2010 REST var call = $.ajax({ url: "http://<Url To Site>/_vti_bin/listdata.svc/Vendors?$select=Vendor,Id&$top=1000", type: "GET", dataType: "json", headers: { Accept: "application/json;odata=verbose" } }); call.done(function (data,textStatus, jqXHR){ var options = "<option value='0'>(None)</option>"; for (index in data.d.results) //results may exist in data.d { options += "<option value='"+ data.d.results[index].Id +"'>"+data.d.results[index].Title+"</option>"; } $("select[title='<Field Display Name>']").append(options); }); call.fail(function (jqXHR,textStatus,errorThrown){ alert("Error retrieving Tasks: " + jqXHR.responseText); });
  12. 12. SHAREPOINT 2013 REST var call = $.ajax({ url: _spPageContextInfo.webAbsoluteUrl + "/_api/Web/Lists/GetByTitle('ListName')/items", type: "GET", dataType: "json", headers: { Accept: "application/json;odata=verbose" } }); call.done(function (data,textStatus, jqXHR){ var options = "<option value='0'>(None)</option>"; for (index in data.d.results) { options += "<option value='"+ data.d.results[index].Id +"'>"+data.d.results[index].Title+"</option>"; } $("select[title='<Field Display Name>']").append(options); }); call.fail(function (jqXHR,textStatus,errorThrown){ alert("Error retrieving Tasks: " + jqXHR.responseText); });
  13. 13. REST and CSOM Behind the Scenes
  14. 14. API Coverage FIRST QUARTER
  15. 15. REST’s Roster • • • • • Sites, Webs, Features, Event Receivers, Site Collections Lists, List Items, Fields, Content Types, Views, Forms, IRM Files, Folders Users, Roles, Groups, User Profiles, Feeds Search
  16. 16. It‟s good! FIELD GOAL FOR REST!
  17. 17. CSOM’s Roster • • • • • • • • • • • Sites, Webs, Features, Event Receivers, Site Collections Lists, List Item s, Fields, Content Types, Views, Forms, IRM Files, Folders Users, Roles, Groups, User Profiles, Feeds Web Parts Search Taxonomy Workflow E-Discovery Analytics Business Data
  18. 18. And the extra point…. Is good! TOUCHDOWN CSOM!
  19. 19. 0 0:0 0 CSOM QTR REST 7 1 3
  20. 20. Platforms and Standards SECOND QUARTER
  21. 21. REST’s Playbook “REST is something Roy Fielding wrote back in 2000 that described a way to share data over HTTP. Unfortunately companies created very different implementation of RESTful services so a bunch got together to define an agreed upon protocol called the Open Data Protocol, also known as OData). The OData spec defines the data formats returned as well as the specific vocabularies used to interact with OData services. Each vendor then implemented it on their own technology stack. Microsoft did this and called their OData product WCF Data Services (notice the URL is actually odata.aspx on MSDN). SharePoint 2013's REST interface is built using WCF Data Services 5.0 which implements the OData v3.0 specification. Unfortunately the SharePoint 2013 implementation does not include everything the spec states, but it's pretty close.” Read more at http://www.andrewconnell.com/blog/sharepoint-2013csom-vs.-rest-...-my-preference-and-why
  22. 22. REST’s Playbook MSDN Magazine - Understanding and Using the SharePoint 2013 REST Interface http://msdn.microsoft.com/en-us/magazine/dn198245.aspx Use OData query operations in SharePoint REST requests http://msdn.microsoft.com/en-us/library/office/fp142385.aspx Another field goal for REST!
  23. 23. CSOM’s Playbook .NET, Silverlight, JavaScript CSOM responds with a field goal!
  24. 24. REST’s Playbook • Platform independent – PHP, Java, JavaScript, .NET, etc.. Etc • • Many Libraries to choose from that support oData Test queries in browser – Chrome app PostMan REST ends the quarter strong with Another field goal!
  25. 25. 0 0:0 0 CSOM 10 REST QTR 2 9
  26. 26. SPServices HALF-TIME SHOW!
  27. 27. SPServices jQuery library that wraps SharePoint‟s .asmx Web Services in easy to call methods • Pros – Shorter learning curve for those already comfortable with jQuery – Cross site access – More universal Anonymous Access – Works in SharePoint 2007 • Cons – .asmx web services have been deprecated – Results returned as XML that must be manually parsed http://spservices.codeplex.com
  28. 28. SPServices $().SPServices({ operation: "GetListItems", async: true, listName: "Vendors", CAMLViewFields: "<ViewFields><FieldRef Name='Vendor' /></ViewFields>", CAMLQuery: "<Query><Where><Neq><FieldRef Name='ID' /><Value Type='Number'>0</Value></Neq></Where></Query>";, completefunc: function(xData, Status) { var options = "<option value='0'>(None)</option>“ $(xData.responseXML).SPFilterNode("z:row").each(function() { var Vendor = ($(this).attr("ows_Vendor")); var ID = $(this).attr("ows_ID"); options += "<option value='"+ ID +"'>"+Vendor+"</option>"; }); $("select[title='<Field Display Name>']").append(options); }});
  29. 29. Ease of Use / Flexibility THIRD QUARTER
  30. 30. Working with SCOM CAML '<Query><Where>' + '<Or><Or><And><Geq><FieldRef Name="StartDate" /><Value IncludeTimeValue="TRUE" Type="DateTime"> 2013-11-01 „+ „</Value></Geq><Leq><FieldRef Name="StartDate" /><Value IncludeTimeValue="TRUE" Type="DateTime"> 2013-12-31 '+ '</Value></Leq></And><And><Geq><FieldRef Name="DueDate" /><Value IncludeTimeValue="TRUE" Type="DateTime"> 2013-11-01 '+ '</Value></Geq><Leq><FieldRef Name="DueDate" /><Value IncludeTimeValue="TRUE" Type="DateTime">‟ 2013-12-31‟</Value></Leq></And></Or>' + '<And><Geq><FieldRef Name="DueDate" /><Value IncludeTimeValue="TRUE" Type="DateTime">' 2013-12-31'</Value></Geq><Leq><FieldRef Name="StartDate" /><Value IncludeTimeValue="TRUE" Type="DateTime"> 2013-11-01 '+ '</Value></Leq></And></Or>' + '</Where></Query>'
  31. 31. Working with SCOM CAML There‟s a flag on the play
  32. 32. Working with REST • Simplified Queries ((StartDate ge „2013-11-01‟ and StartDate le „2013-12-31‟) or (DueDate ge „2013-11-01‟ and DueDate le „2013-12-31‟) or (DueDate ge ' 2013-12-31 ' and StartDate le „2013-11-01‟))
  33. 33. Working with REST Touchdown!! 2 Point Conversion is good!!!
  34. 34. Working with CSOM Easier learning curve for .NET Devs Similar to Server Object Model Compilation in non JavaScript implementations
  35. 35. It‟s good! FIELD GOAL FOR CSOM!
  36. 36. 0 0:0 0 CSOM QTR REST 13 3 17
  37. 37. Batch Processing/Performance F0URTH QUARTER
  38. 38. CSOM Batch Processing • • Batch Updates Batch Exception Handling – One call to server to handle try, catch, finally
  39. 39. CSOM Batch Processing Batch Insert function CreateListItems(objArray) { var itemArray = []; var clientContext = SP.ClientContext.get_current(); var oList = clientContext.get_web().get_lists().getByTitle('ListName'); for(index in objArray){ var curObject = itemArray[index]; var itemCreateInfo = new SP.ListItemCreationInformation(); var oListItem = oList.addItem(itemCreateInfo); oListItem.set_item('Title', curObject.title); oListItem.update(); itemArray[i] = oListItem; clientContext.load(itemArray[i]); } clientContext.executeQueryAsync(onQuerySucceeded, onQueryFailed); }
  40. 40. CSOM Batch Processing Batch Exception Handling scope = new SP.ExceptionHandlingScope(context); var scopeStart = scope.startScope(); var scopeTry = scope.startTry(); list = web.get_lists().getByTitle("Tasks"); context.load(list); scopeTry.dispose(); var scopeCatch = scope.startCatch(); var lci = new SP.ListCreationInformation(); lci.set_title("Tasks"); lci.set_quickLaunchOption(SP.QuickLaunchOptions.on); lci.set_templateType(SP.ListTemplateType.tasks); list = web.get_lists().add(lci); scopeCatch.dispose(); var scopeFinally = scope.startFinally(); list = web.get_lists().getByTitle("Tasks"); context.load(list); scopeFinally.dispose(); scopeStart.dispose(); context.executeQueryAsync(success, fail);
  41. 41. CSOM Batch Processing TOUCHDOWN!
  42. 42. REST Batch Processing FUMBLE!
  43. 43. REST vs. CSOM Performance • REST is “chattier” – No batching • CSOM returns more data – Bigger packets • REST can return array of JSON objects – Can feed array directly to libraries without transformation or iteration
  44. 44. It‟s good! FIELD GOAL FOR REST!!
  45. 45. 0 0:0 0 CSOM QTR REST 20 4 20
  46. 46. Anonymous Access OVERTIME!
  47. 47. http://blogs.msdn.com/b/kaevans/archive/2013/10/24/whatevery-developer-needs-to-know-about-sharepoint-apps-csomand-anonymous-publishing-sites.aspx KIRK EVANS - WHAT EVERY DEVELOPER NEEDS TO KNOW ABOUT SHAREPOINT APPS, CSOM, AND ANONYMOUS PUBLISHING SITES
  48. 48. REST & CSOM Anonymous Access On-Premises
  49. 49. REST & CSOM Anonymous Access On-Premises • According to Microsoft “Not Advisable” – Exposes too much information to nosey people – Opens you up to DoS attacks • Reality – SPServices can be used by nosey people (can’t turn it off) – Everyone is open to a DoS attack
  50. 50. REST & CSOM Anonymous Access Office 365 Anonymous Access with REST* or CSOM is not possible in Office 365 *It Depends
  51. 51. CSOM Anonymous • Blocked by default – GetItems and GetChanges on SPLists – GetChanges and GetSubwebsForCurrentUser on SPWebs – GetChanges on SPSites • Use PowerShell to enable $webapp = Get-SPWebApplication "http://WebAppUrl" $webapp.ClientCallableSettings.AnonymousRestrictedTypes.Remove([micros oft.sharepoint.splist], "GetItems") $webapp.Update()
  52. 52. REST Anonymous Search in REST Waldek Mastykarz - Configuring SharePoint 2013 Search REST API for anonymous users http://blog.mastykarz.nl/configuring-sharepoint-2013search-rest-api-anonymous-users/
  53. 53. FIELD GOAL REST!!!!!!!! REST WINS!
  54. 54. 0 0:0 0 CSOM QTR REST 20 OT 23
  55. 55. Game Highlights CSOM More API Coverage Than REST Designed to be similar to .NET Object Model, more comfortable for .NET Devs Handles batch processing Well CAML still sucks Anonymous possible but not advised REST
  56. 56. Game Highlights CSOM REST More API Coverage Than REST NO MORE CAML! Designed to be similar to .NET Object Model, more comfortable for .NET Devs Platform independent, REST/oData play well with other libraries Handles batch processing Well Easy testing in browser using URL CAML still sucks Can perform better than CSOM Anonymous possible but not advised Anonymous search works well, other anonymous possible as well but not advised
  57. 57. There are no stupid ones… QUESTIONS??
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×