Every SharePoint 2010 server is a Data Services server

I haven't been writing much here, mostly because I've been way too busy but also because I couldn't discuss publicly many of the things I'm doing. Now that SharePoint 2010 has been announced and its feature set published everywhere, I can finally discuss one of the coolest things we've been up to lately.

SharePoint is a repository of resources (list items and documents in document libraries) that are collected and manipulated collaboratively. Resources have a bunch of security and business logic attached to them, such as who can see each item, who gets to change it, or whether a particular column in a list needs to conform to a particular validation formula.

When SharePoint folks said they wanted a RESTful interface this was great news...the system is just a perfect fit. Not only it's a perfect fit for RESTful services in general, but also for Astoria in particular. In the end SharePoint is very data-centric in nature, it already supports queries and business logic as part of the uniform interface.

So we're really excited to announce that as of SharePoint 2010, every SharePoint server is an Astoria server out of the box. No configuration required or anything, just make sure the proper version of ADO.NET Data Services is in the box. For SharePoint 2010 beta, the "right" version is ADO.NET Data Services v1.5 CTP2. We'll put details out there for future iterations as they come.

Official write up in the Astoria team blog.

The SharePoint Data Service head is not just a side integration deal, it's a full-on REST-over-HTTP head for SharePoint. It supports browsing as well as modifying data using regular HTTP verbs (GET, PUT, DELETE, etc.), it does ETags for concurrency control, enforces business logic as part of side-effecting methods, and it handles the full range of Data Services conventions for URLs, Atom and JSON payload formats, etc. It also exposes full metadata like any other Astoria service, allowing Visual Studio and any other metadata-driven client to give you a great experience on the client side. Now if you need to get or manipulate data in SharePoint from any platform in any language, all you need is an HTTP stack.

The other cool aspect is that the SharePoint folks where able to build this entirely on top of public bits, using our new fancy provider model for advanced data sources I discussed here some time ago.

SharePoint joins a growing family of Microsoft products that enable users to share data through the use of a simple RESTful interface that follows the Astoria conventions when needed (e.g. URLs, structured data in Atom). Another example on the server side include SQL Server Reporting Services, which in SQL Server 2008 R2 can now render any report as Atom feed that follows the Astoria conventions (examples here). On the client, in addition to developer-oriented options such as .NET, Silverlight, AJAX, PHP, Java and more, we now also have PowerPivot (f.k.a. Gemini) which can pull data from any data service and do fancy analysis and publishing over it, making it trivial to bring data from Data Services into Microsoft Excel 2010 among other things.

I find this to be extremely important. A simple, uniform way of sharing data at the protocol level, and in a way that truly enables the lowest possible bar of entry, is key to enable broad integration across products and break data silos that form around applications.

I'll be talking about this at the SharePoint conference 2009 in Las Vegas this week, and at the Professional Developer Conference (PDC 2009) in late November. If you're attending any of these and this sounds interesting, these sessions will drill into plenty of details.

-pablo

Comments

  • Anonymous
    October 26, 2009
    Hi, I tried it with SharePoint 2010 TAP and http://host:port/_vti_bin/listdata.svc does not return anything. I read in your blog that ADO.NET Data Services has to be installed on the SharePoint server. Also,  there is a note on ADO.NET Team Blog that ADO.NET has to be installed on the server prior to the SharePoint installation in order REST services work. It raises the question - whether this REST interface will be available for each SharePoint 2010 installation in SP 2010release? Will it be available in SP2010 beta? If not then we cannot rely on the fact that REST service will be available for any particular SharePoint instance since people who installed it may decide that they do not need these services or they may simply forgot to install it prior to SP installation. Thank you, Mark

  • Anonymous
    October 28, 2009
    Hi Pablo, I was present in your talk on RESTful Data Services Interface at the SharePoint 2009 conference. Great session! I was wondering if you could post the tool you created to demonstrate the HTTP content type representations for ATOM and JSON. Thanks, Vimal

  • Anonymous
    October 28, 2009
    @Mark, you're probably not seeing it because you are using an earlier build of SharePoint 2010 that is not compatible with the CTP2 release of Data Services. Once the SharePoint 2010 public beta is available you should be able to install Data Services CTP2 and get things going. To answer your question, yes, all SharePoint 2010 servers will have the REST interface once you install Data Services on them. @Vimal, thanks! If you email me directly (you can just use the "contact" part of this blog) I'll send you the file. It's really nothing fancy...just a quick HTML page.

  • Anonymous
    November 11, 2009
    Hi Pablo, I sent an email using the "contact" part of the blog regarding the tool a while back but haven't heard back from you. It would be awesome if you can share the tool. Here's my email id: vsubra@affymetrix.com. Hope you are having a great talk once again at the PDC. Thanks, Vimal

  • Anonymous
    December 06, 2009
    Hi Pablo, recently i got a chance to watch your PDC video and Mix video on ADO.net Dataservice....awesome stuff  :) I am very new to this technology but find it very interesting; thanks to your videos and lots of sample application available. there are just 2 things that are giving me a hard time:

  1. how actually this thing works...i mean how the querystring from  URL converted in LINQ Expression?? and 2.Can we place 2 interceptor on a single object collection?? I mean can i have [Queryinetrceptor("Products")] { a lambda on product here!! } [Queryinetrceptor("Products")] { another lambda here!!!! } i would really appreciate if you could help me understand this or guide me and show me the way....!!! Thanks, Akhilesh Bhale