SharePoint REST vs CSOM
Upcoming SlideShare
Loading in...5
×
 

SharePoint REST vs CSOM

on

  • 2,998 views

Heads up competition between REST and CSOM.

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

Statistics

Views

Total Views
2,998
Slideshare-icon Views on SlideShare
2,997
Embed Views
1

Actions

Likes
0
Downloads
38
Comments
1

1 Embed 1

https://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    SharePoint REST vs CSOM SharePoint REST vs CSOM Presentation Transcript

    • 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 Event Organizer Blogger, Writer, Speaker Bacon aficionado • @mrackley • http://www.sharepointhillbilly.com
    • 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
    • http://www.pluralsight.com/training/Courses/TableOfContents/ sharepoint-2013-client-object-model-rest ROB WINDSOR - SHAREPOINT 2013 DEVELOPMENT: CLIENT OBJECT MODEL AND REST API.
    • CLIENT SIDE OBJECT MODEL (CSOM)
    • • • • • 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
    • 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()); }
    • SHAREPOINT REST
    • • 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
    • 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
    • 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); });
    • 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); });
    • 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 Types, Views, Forms, IRM Files, Folders Users, Roles, Groups, User Profiles, Feeds Search
    • It‟s good! FIELD GOAL FOR REST!
    • 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
    • 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. 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
    • 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!
    • 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 support oData Test queries in browser – Chrome app PostMan REST ends the quarter strong with Another field goal!
    • 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 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
    • 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); }});
    • Ease of Use / Flexibility THIRD QUARTER
    • 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>'
    • 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-11-01‟ and DueDate le „2013-12-31‟) or (DueDate ge ' 2013-12-31 ' and StartDate le „2013-11-01‟))
    • 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 implementations
    • 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.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); }
    • 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);
    • 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 return array of JSON objects – Can feed array directly to libraries without transformation or iteration
    • 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-anonymous-publishing-sites.aspx KIRK EVANS - WHAT EVERY DEVELOPER NEEDS TO KNOW ABOUT SHAREPOINT APPS, CSOM, AND ANONYMOUS PUBLISHING SITES
    • REST & CSOM Anonymous Access On-Premises
    • 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
    • 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 SPWebs – GetChanges on SPSites • Use PowerShell to enable $webapp = Get-SPWebApplication "http://WebAppUrl" $webapp.ClientCallableSettings.AnonymousRestrictedTypes.Remove([micros oft.sharepoint.splist], "GetItems") $webapp.Update()
    • 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/
    • 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 Devs Handles batch processing Well CAML still sucks Anonymous possible but not advised REST
    • 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
    • There are no stupid ones… QUESTIONS??