<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Pablo Castro's blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/pablo/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/pablo/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 05:24:20 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Advertising support for OData in web pages</title>
      <link>https://docs.microsoft.com/archive/blogs/pablo/advertising-support-for-odata-in-web-pages</link>
      <pubDate>Tue, 15 Jun 2010 15:41:50 GMT</pubDate>
      <dc:creator><![CDATA[Pablo M. Castro]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pablo/2010/06/15/advertising-support-for-odata-in-web-pages/</guid>
      <description><![CDATA[Most browsers today will automatically enable their RSS/Atom reader option when you're on a page...]]></description>
      <content:encoded><![CDATA[<p>Most browsers today will automatically enable their RSS/Atom reader option when you're on a page that has a feed in it. This is because the page has one or more &lt;link&gt; elements pointing to RSS/Atom endpoints, for example:</p>  <p>&lt;link rel=&quot;alternate&quot; type=&quot;application/rss+xml&quot; title=&quot;Pablo Castro&amp;#39;s blog (RSS 2.0)&quot; href=&quot;http://blogs.msdn.com/b/pablo/rss.aspx&quot; /&gt;</p>  <p>It would be great if all OData clients could automatically discover the location of the data feed that has the data represented by the current web page, or more in general, by the document fetched through some arbitrary URL. We had this discussion with <a href="http://www.hanselman.com/blog/">Scott</a> some time ago and he rolled the results in the <a href="http://nerddinner.com/">NerdDinner.com</a> site, but I failed to post this so it stays documented somewhere and others can follow, so here it goes.</p>  <p>Servers can advertise the OData endpoints that correspond to a resource using two mechanisms. Ideally servers would implement both, but sometimes limitations in the hosting environment and such may make it hard to support the header-based approach.</p>  <p><strong>Using &lt;link&gt; elements</strong></p>  <p>The first mechanism consists of adding one or more &lt;link&gt; headers to any HTML web page that shows data where that data can also be accessed as an OData feed using some other URL. There are two kinds of links for OData, those that direct clients to the service root (usually where the service document lives)and those that point at the specific dataset that corresponds to the data displayed in the page (e.g. point to a specific collection and includes whatever filters and sort order is used for display). Taking the example from the home page of NerdDinner.com:</p>  <p>&lt;link rel=&quot;odata.service&quot; title=&quot;NerdDinner.com OData Service&quot; href=&quot;/Services/OData.svc&quot; /&gt;    <br />&lt;link rel=&quot;odata.feed&quot; title=&quot;NerdDinner.com OData Service - Dinners&quot; href=&quot;/Services/OData.svc/Dinners&quot; /&gt;</p>  <p>In this example the relation &quot;odata.service&quot; indicates that the href has a URL pointing to the root of a service and the relation &quot;odata.feed&quot; specifies the URL to the specific dataset for the page (dinners in this case). Note that it's perfectly fine to have multiple of each, although I would expect that the common thing to do would be go have one &quot;odata.service&quot; and zero or more &quot;odata.feed&quot;, depending on the specific page you're looking at.</p>  <p>If your web page has the typical syndication icon to indicate that it has feeds in it, and you'd like to indicate visually that it also has links to OData feeds you can use the OData icon like NerdDinner.com does (next to the syndication icon on the right in the screenshot):</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/68/87/metablogapi/7444.image_4E4CF2E7.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-68-87-metablogapi/7444.image_5F00_4E4CF2E7.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/68/87/metablogapi/3323.image_thumb_14C9E2F0.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-68-87-metablogapi/3323.image_5F00_thumb_5F00_14C9E2F0.png" width="573" height="196" /></a> </p>  <p><strong>Using links in response headers</strong></p>  <p>There is a proposal currently in-flight to standardize how servers can send links to related resources of a given resource using response headers instead of including them as part of the content of the response body. This is great because it means you don't have to know how to parse the content-type of the body (e.g. HTML) in order to obtain a link. In our context, your OData client wouldn't need to do any HTML parsing to obtain the OData feed related to a web page or some other random resource obtained through a user-provided URL.</p>  <p>The &quot;Web Linking&quot; proposal is described in the current draft in the IETF web site:</p>  <p><a title="http://datatracker.ietf.org/doc/draft-nottingham-http-link-header/" href="http://datatracker.ietf.org/doc/draft-nottingham-http-link-header/">http://datatracker.ietf.org/doc/draft-nottingham-http-link-header/</a></p>  <p>As for the specifics for OData we would define two relations, &quot;http://odata.org/link/service&quot; and &quot;http://odata.org/link/feed&quot;, corresponding to the &quot;odata.service&quot; and &quot;odata.feed&quot; relations used in the &lt;link&gt; element above. So for NerdDinner.com these would look like this in the response header section:</p>  <p>Link: &lt;/Services/OData.svc/&gt;; rel=&quot;http://odata.org/link/service&quot;; title=&quot;NerdDinner.com OData Service&quot;    <br />Link: &lt;/Services/OData.svc/Dinners/&gt;; rel=&quot;http://odata.org/link/feed&quot;; title=&quot;NerdDinner.com OData Service - Dinners&quot;</p>  <p> For all folks hosting OData services, please consider adding one or if possible both of these to advertise your services. For anybody writing a client, this is the best way to discover services given an arbitrary URL that may point to a web page or something like that, and you can still make it nicely redirect to the right location and things will &quot;just work&quot; for your users.</p>  <p>-pablo</p>]]></content:encoded>
    </item>
    <item>
      <title>HTTP PATCH support for OData in WCF Data Services</title>
      <link>https://docs.microsoft.com/archive/blogs/pablo/http-patch-support-for-odata-in-wcf-data-services</link>
      <pubDate>Mon, 14 Jun 2010 15:57:09 GMT</pubDate>
      <dc:creator><![CDATA[Pablo M. Castro]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pablo/2010/06/14/http-patch-support-for-odata-in-wcf-data-services/</guid>
      <description><![CDATA[NOTE: this post was originally published on 5/20/10 but somehow disappeared, probably during the...]]></description>
      <content:encoded><![CDATA[<p><em>NOTE: this post was originally published on 5/20/10 but somehow disappeared, probably during the transition to the new blogging infrastructure in blogs.msdn.com. This version should be close to the original although it may differ in details.</em></p>  <p>Back when we were working on the initial version of OData (Astoria back then) there were some discussion about introducing a new HTTP method called PATCH, which would be similar to PUT but instead of having to send a whole new version of the resource you wanted to update, it would let you send a patch document with incremental changes only. We needed exactly that, but since the proposal was still in flux we decided to use a different word (to avoid any future name clash) until PATCH was ready. So OData services use a custom method called &quot;MERGE&quot; for now. </p>  <p>Now HTTP PATCH is official (see <a href="http://tools.ietf.org/html/rfc5789)">http://tools.ietf.org/html/rfc5789)</a>. We'll queue it up and get it integrated into OData and our .NET implementation WCF Data Services when we have an opportunity. Of course those things take a while to rev, and we have to find a spot in the queue, etc. In the meanwhile, here is an extremely small WCF behavior adds PATCH support to any service created with WCF Data Service. This example is built using .NET 4.0, but it should work in 3.5 SP1 as well. </p>  <p><a title="http://code.msdn.microsoft.com/DataServicesPatch" href="http://code.msdn.microsoft.com/DataServicesPatch">http://code.msdn.microsoft.com/DataServicesPatch</a></p>  <p>To use it, just include the sample code in PatchBehavior.cs in your project and add [PatchSupportBehavior] as an attribute to your service class. For example: </p>  <p>&#160;&#160;&#160; [PatchSupportBehavior]    <br />&#160;&#160;&#160; public class Northwind : DataService&lt;NorthwindEntities&gt;     <br />&#160;&#160;&#160; {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; // your data service code     <br />&#160;&#160;&#160; } </p>  <p>To see it working you can use any environment with an HTTP stack. Below is an example using <a href="http://curl.haxx.se/">curl</a> to update a single attribute (the CategoryName value) using PATCH. The first try shows what happens when you try PATCH against a service that doesn't have PATCH enabled:</p>  <p>curl -v -X PATCH -H content-type:application/json -d &quot;{CategoryName:'Beverages'}&quot; http://localhost:29050/Northwind.svc/Categories(1)    <br />* About to connect() to localhost port 29050 (#0)     <br />*&#160;&#160; Trying 127.0.0.1... connected     <br />* Connected to localhost (127.0.0.1) port 29050 (#0)     <br />&gt; PATCH /Northwind.svc/Categories(1) HTTP/1.1     <br />&gt; User-Agent: curl/7.19.3 (i386-pc-win32) libcurl/7.19.3 OpenSSL/0.9.8j zlib/1.2.3     <br />&gt; Host: localhost:29050     <br />&gt; Accept: */*     <br />&gt; content-type:application/json     <br />&gt; Content-Length: 26     <br />&gt;     <br />&lt; HTTP/1.1 501 Not Implemented     <br />&lt; Date: Mon, 14 Jun 2010 22:36:49 GMT     <br />&lt; DataServiceVersion: 1.0;     <br />&lt; Content-Length: 217     <br />&lt; Cache-Control: private     <br />&lt; Content-Type: application/xml     <br />&lt; Connection: Close     <br />&lt;     <br />&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;yes&quot;?&gt;     <br />&lt;error xmlns=&quot;http://schemas.microsoft.com/ado/2007/08/dataservices/metadata&quot;&gt;     <br />&#160; &lt;code&gt;&lt;/code&gt;     <br />&#160; &lt;message xml:lang=&quot;en-US&quot;&gt;Not Implemented&lt;/message&gt;     <br />&lt;/error&gt;     <br />* Closing connection #0</p>  <p>Once the PATCH support attribute is applied, things look better:</p>  <p>curl -v -X PATCH -H content-type:application/json -d &quot;{CategoryName:'Beverages'}&quot; http://localhost:29050/Northwind.svc/Categories(1)    <br />* About to connect() to localhost port 29050 (#0)     <br />*&#160;&#160; Trying 127.0.0.1... connected     <br />* Connected to localhost (127.0.0.1) port 29050 (#0)     <br />&gt; PATCH /Northwind.svc/Categories(1) HTTP/1.1     <br />&gt; User-Agent: curl/7.19.3 (i386-pc-win32) libcurl/7.19.3 OpenSSL/0.9.8j zlib/1.2.3     <br />&gt; Host: localhost:29050     <br />&gt; Accept: */*     <br />&gt; content-type:application/json     <br />&gt; Content-Length: 26     <br />&gt;     <br />&lt; HTTP/1.1 204 No Content     <br />&lt; Date: Mon, 14 Jun 2010 22:34:42 GMT     <br />&lt; DataServiceVersion: 1.0;     <br />&lt; Cache-Control: no-cache     <br />&lt; Content-Length: 0     <br />&lt; Connection: Close     <br />&lt;     <br />* Closing connection #0</p>  <p>As for how it works, the behavior catches all requests before they go to the WCF Data Services runtime. For each request it inspects the HTTP method used and if it is PATCH then it changes it to MERGE to make the system believe it was MERGE all along. </p>  <p>Usual disclaimers:    <br />- I tested this by running it exactly once. You may want to be more detailed on your quality process :)     <br />- Once we do the real thing the system may or may not behave as this one, so you need to be prepared to deal with some potential differences between the two.</p>  <p>-pablo</p>]]></content:encoded>
    </item>
    <item>
      <title>OData chat with Scott Hanselman, warming up for Mix</title>
      <link>https://docs.microsoft.com/archive/blogs/pablo/odata-chat-with-scott-hanselman-warming-up-for-mix</link>
      <pubDate>Sat, 13 Mar 2010 23:14:00 GMT</pubDate>
      <dc:creator><![CDATA[Pablo M. Castro]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pablo/2010/03/13/odata-chat-with-scott-hanselman-warming-up-for-mix/</guid>
      <description><![CDATA[A few days ago Scott and I recorded a "hanselminutes" episode where we spent some time talking about...]]></description>
      <content:encoded><![CDATA[<P>A few days ago Scott and I recorded a "hanselminutes" episode where we spent some time talking about OData. Scott came armed with a whole bunch of questions to help tease apart the current transition we're going through regarding products names. We also touched on various topics ranging from the layering of the system in our .NET implementation to what is the relationship of OData with the REST architectural style.</P>
<P><A href="http://www.hanselminutes.com/default.aspx?showID=223" mce_href="http://www.hanselminutes.com/default.aspx?showID=223">The interview is now live.</A></P>
<P>This was a good warm-up exercise for next week. We'll have a lot to say about OData at <A href="http://live.visitmix.com/" mce_href="http://live.visitmix.com/">Mix 2010</A>&nbsp;in Las Vegas. If you are planning on attending Mix you won't want to miss the keynotes and OData sessions that are happening on Tuesday. We'll also be hanging out in the common areas during the event so if you're into this topic and would like to chat definitely come and find us.</P>
<P>-pablo</P>
<P mce_keep="true">&nbsp;</P>]]></content:encoded>
    </item>
    <item>
      <title>Implementing only certain aspects of OData</title>
      <link>https://docs.microsoft.com/archive/blogs/pablo/implementing-only-certain-aspects-of-odata</link>
      <pubDate>Tue, 26 Jan 2010 16:33:00 GMT</pubDate>
      <dc:creator><![CDATA[Pablo M. Castro]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pablo/2010/01/26/implementing-only-certain-aspects-of-odata/</guid>
      <description><![CDATA[While we focus on keeping things simple, the whole OData protocol does have a bunch of functionality...]]></description>
      <content:encoded><![CDATA[<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>While we focus on keeping things simple, the whole OData protocol does have a bunch of functionality in it, and you don't always need the whole thing. If you're implementing a client or a server, how much of OData do you need to handle?<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>OData is designed to be modular and grow as you need more features. We don't want to dictate exactly everything a service needs to do. Instead we want to make sure that if you choose to do something, you do it in a well-known way so everybody else can rely on that.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>Here is one possible way of slicing the capabilities of the protocol into various click-stops. I'm sure there are others as well.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri><STRONG>Rows<o:p></o:p></STRONG></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>You can use OData just as a way of representing a bunch of rows, typically available on an HTTP end point and retrievable using HTTP GET (although a file on disk will do just as well if you let go of content type negotiation and such). <SPAN style="mso-spacerun: yes">&nbsp;</SPAN><o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>A set of rows in OData is represented using an Atom feed, where each entry has the usual metadata plus structured data encoded as name/value pairs inside content. For example, check out the content of this feed (if you're using a browser that automatically renders Atom feeds in a nice view, you may want to turn that off):<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><A href="http://ogdi.cloudapp.net/v1/dc/BankLocations"><FONT size=3 face=Calibri>http://ogdi.cloudapp.net/v1/dc/BankLocations</FONT></A><o:p></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>A couple of incremental things you can add:<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>- Type annotations to individual properties to have full type fidelity (visible in the example above)<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>- You can use Atom-style paging (e.g. a link with a rel of "next") for server-driven paging of large rowsets<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3 face=Calibri>What do you get? A server supporting this has enough, for example, for PowerPivot (</FONT><A href="http://powerpivot.com/"><FONT color=#0000ff size=3 face=Calibri>http://powerpivot.com</FONT></A><FONT size=3><FONT face=Calibri>) to load data from it. The Data Services clients will also work if you hand-craft a type that matches the shape of the data (or the subset of the shape you care about).<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri><STRONG>Query<o:p></o:p></STRONG></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>You can choose to support simple query options such as filter ($filter), sorting ($orderby), paging ($top, $skip), projections ($select) and inline expansion ($expand). For example:<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri><A href="http://ogdi.cloudapp.net/v1/dc/BankLocations?$filter=zipcode eq 20007" mce_href="http://ogdi.cloudapp.net/v1/dc/BankLocations?$filter=zipcode eq 20007">http://ogdi.cloudapp.net/v1/dc/BankLocations?$filter=zipcode eq 20007<o:p></o:p></A></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>(this service endpoint only supports filter and paging, no sorting and no projections for now)<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3 face=Calibri>The actual definitions of all these options is documented in </FONT><A href="http://odata.org/"><FONT color=#0000ff size=3 face=Calibri>http://odata.org</FONT></A><FONT size=3><FONT face=Calibri> if you want to look at it in more detail.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>What do you get? Developers using the Data Services client for .NET would be able to use LINQ against your service, at least for the operators that map to the query options you implemented.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri><STRONG>Service Documents<o:p></o:p></STRONG></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>You can choose to add a <A href="http://tools.ietf.org/html/rfc5023#section-8" mce_href="http://tools.ietf.org/html/rfc5023#section-8">service document</A> to collect links to multiple collections that make up a data set, for example:<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><A href="http://ogdi.cloudapp.net/v1/dc/"><FONT size=3 face=Calibri>http://ogdi.cloudapp.net/v1/dc/</FONT></A><o:p></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>What do you get? With this clients can discover what collections of data your service exposes. Some clients such as PowerPivot will use this to let the user browse data sets.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri><STRONG>Metadata<o:p></o:p></STRONG></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>You can choose to add rich metadata describing the collections, shapes of resources in each collections, and their associations through the Entity Data Model. For example (not the best example as it does not contain associations):<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><A href="http://ogdi.cloudapp.net/v1/dc/$metadata"><FONT size=3 face=Calibri>http://ogdi.cloudapp.net/v1/dc/$metadata</FONT></A><o:p></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>What do you get? If you have metadata then Visual Studio can automatically generate .NET classes for your service types, and a service entry point with properties for each of your top-level sets. The <A href="http://blogs.msdn.com/astoriateam/archive/2009/11/17/introducing-the-microsoft-open-data-protocol-visualizer.aspx" mce_href="http://blogs.msdn.com/astoriateam/archive/2009/11/17/introducing-the-microsoft-open-data-protocol-visualizer.aspx">OData visualizer</A> also can allow developers to view and understand the structure of your data service.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri><STRONG>Update<o:p></o:p></STRONG></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>You can choose to support updates through HTTP POST/PUT/DELETE verbs. Most services that allow updates don't allow anonymous access so I can't easily share an example, but it would be POSTing or PUTing the same payload you GET. For DELETE only the URL is needed. For all update operations you can use ETags for optimistic concurrency control if that's required for your scenarios.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>What you get? Clients that support updates such as the .NET, AJAX, Silverlight, PHP and Java ones would be able to submit changes to the server.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri><STRONG>Formats<o:p></o:p></STRONG></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>While we encourage folks to support for Atom and JSON formats, you can get pretty far with Atom alone.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri><STRONG>Batching<o:p></o:p></STRONG></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>More sophisticated features in OData include batching and changesets for round-trip optimization and unit-of-work support.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P><o:p>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>What you get? Clients that support batching (most of them do) would get not only optimizations for multiple queries, but the ability to save a whole unit of work (a set of changes that are applied atomically).<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p>&nbsp;</o:p></P><o:p><FONT size=3 face=Calibri>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri><STRONG>Media</STRONG></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>Data Services uses Atom's "media link entries" to manage large blobs such as media elements. Clients and servers will handle media if you expose them following the Atom way.</FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText></FONT></o:p><o:p>&nbsp;</o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>The details required for each of the areas here are discussed in the OData specs which are accessible at <A href="http://odata.org/">http://odata.org</A>.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><o:p><FONT size=3 face=Calibri>[Update 1/28/10] I got this question several times so it'll clarify here: these are not "incremental levels".&nbsp;Implementing the "rows" category is kind of fundamental, but other than that you can pick and choose what to implement based on the capabilities of your back-end system, what clients you want to enable and the requirements of your particular scenario.</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri></FONT></FONT>&nbsp;</P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><FONT size=3><FONT face=Calibri>-pablo<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoPlainText><SPAN style="mso-spacerun: yes"><FONT size=3 face=Calibri>&nbsp;</FONT></SPAN><o:p></o:p></P>]]></content:encoded>
    </item>
    <item>
      <title>Want to work on HTML5 database stuff? We're looking</title>
      <link>https://docs.microsoft.com/archive/blogs/pablo/want-to-work-on-html5-database-stuff-were-looking</link>
      <pubDate>Tue, 05 Jan 2010 14:19:00 GMT</pubDate>
      <dc:creator><![CDATA[Pablo M. Castro]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pablo/2010/01/05/want-to-work-on-html5-database-stuff-were-looking/</guid>
      <description><![CDATA[As I mentioned yesterday, we're working on HTML5 stuff in general here at Microsoft, and my team in...]]></description>
      <content:encoded><![CDATA[<P>As I <A href="http://blogs.msdn.com/pablo/archive/2010/01/04/html5-does-databases.aspx" mce_href="http://blogs.msdn.com/pablo/archive/2010/01/04/html5-does-databases.aspx">mentioned yesterday</A>, we're working on HTML5 stuff in general here at Microsoft, and my team in particular is looking at the database APIs in HTML5. If you want to be a part of this (working with the rest of the standard folks, design APIs, design things that work on top, etc.) definitely drop me a line (you can contact me using the <A href="http://blogs.msdn.com/pablo/contact.aspx" mce_href="http://blogs.msdn.com/pablo/contact.aspx">"email" form</A> at the top of this blog). Also, feel free to ping me if you'd like to know more about the position. </P>
<P>You can check out the official description of the position here:<BR><A href="https://careers.microsoft.com/JobDetails.aspx?ss=&amp;pg=0&amp;so=&amp;rw=1&amp;jid=13620&amp;jlang=EN">https://careers.microsoft.com/JobDetails.aspx?ss=&amp;pg=0&amp;so=&amp;rw=1&amp;jid=13620&amp;jlang=EN</A></P>
<P>-pablo<BR></P>]]></content:encoded>
    </item>
    <item>
      <title>HTML5 does databases</title>
      <link>https://docs.microsoft.com/archive/blogs/pablo/html5-does-databases</link>
      <pubDate>Mon, 04 Jan 2010 19:42:00 GMT</pubDate>
      <dc:creator><![CDATA[Pablo M. Castro]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pablo/2010/01/04/html5-does-databases/</guid>
      <description><![CDATA[The HTML5* specification has been cooking for a while and lately the amount of buzz around it has...]]></description>
      <content:encoded><![CDATA[<P>The HTML5* specification has been cooking for a while and lately the amount of buzz around it has been growing at full speed. Just <A href="https://twitter.com/#search?q=%23html5" mce_href="https://twitter.com/#search?q=%23html5">search for #HTML5</A> in twitter and you'll see what I mean. After even a quick look at it, it becomes evident that the next version of HTML aims to go much further into the application space than earlier ones. Not only there is a lot of highly expected presentation features such as &lt;video&gt; and &lt;canvas&gt;, but also several APIs to do things that applications do, from background work (with <A href="http://dev.w3.org/html5/workers/" mce_href="http://dev.w3.org/html5/workers/">Web Workers</A>) to direct communication (with <A href="http://dev.w3.org/html5/websockets/" mce_href="http://dev.w3.org/html5/websockets/">Web Sockets</A>) to offline support (with the <A href="http://dev.w3.org/html5/spec/Overview.html#appcache" mce_href="http://dev.w3.org/html5/spec/Overview.html#appcache">App Cache</A>) and databases (with <A href="http://dev.w3.org/html5/webdatabase/" mce_href="http://dev.w3.org/html5/webdatabase/">Web SQL Database</A> and/or <A href="http://dev.w3.org/2006/webapi/WebSimpleDB/" mce_href="http://dev.w3.org/2006/webapi/WebSimpleDB/">Indexed Database API</A>).</P>
<P>I've always been attracted to things that bring data and the Web together. So a while back when I first saw browsers and databases in the same spec I had to get involved. There is a bunch of us at Microsoft interested in HTML5 from different angles, and we have now good momentum to explore this space. So now I'm spending a good chunk of time on the database aspects of HTML5, the API, the developer story, etc. </P>
<P>(btw - no, I haven't given up on Astoria or OData, I'm still plenty busy with that...but hey, how bad could be it to add a whole subject area to the work schedule :) )</P>
<P><STRONG>Current state of things</STRONG></P>
<P>There are currently two proposals for databases in the browser: Web SQL Database and Indexed Database API. </P>
<P>Web SQL Database was the first to appear. It consists of a relatively small Javascript API that allows developers to execute SQL statements. You do most things through SQL, including schema management, querying, updates, etc. While the spec doesn't (or didn't for a while) specifically say anything about the actual dialect of SQL to be used, in practice early implementations used SQLite, and thus directly exposed the SQLite SQL dialect and other details specific to it.</P>
<P>The second and more recent proposal is now called Indexed Database API (was WebSimpleDB) and it exposes an API in terms of ordered tables of Javascript objects. You get or put Javascript objects and use a key to identify and order them. For database people, this is basically an ISAM API with Javascript objects as the record format. You can create indexes to speed up lookups or scans in particular orders. Other than that there is no schema (any clonable Javascript object will do) and no query language. </P>
<P><STRONG>The "right" level of abstraction</STRONG></P>
<P>Of course there are "sides" for this debate about the right database API. I'll just be upfront and take mine: I like the indexed database API better. I have two main motivations for this:</P>
<P>Interoperability: this thing is going to be part of HTML and has to be implementable by multiple browser vendors and still be fully interoperable. Implementing multiple SQL databases and making them fully interoperable is extremely challenging. You would have to line up not only the SQL syntax, but also catalog names, type semantics, execution behavior and perhaps even isolation model and optimization strategies if you wanted really, really similar behavior across browsers. Of course most of this is already described in specifications such as SQL-92 (or SQL:1999, or any of the newer ones); however, databases often don't follow all of it for various (good or not) reasons. The ISAM-style API imposes substantially simpler requirements on the underlying implementation, making it a good candidate for independent, interoperable implementations. </P>
<P>Diversity: if you look at what folks out there have done with Javascript toolkits, it's pretty amazing. From jQuery to Dojo, they've created different abstractions over the base browser APIs, providing diversity of choice for developers writing Web applications. A simple and low level API enables this. Folks can write libraries that provide whatever abstraction they see fit. This includes anything from simple shims to full query support, in whatever language you think it's right to do it in the browser. With a low level API that's consistent across all browsers, and all the fancy abstractions built on top in Javascript, the goal of portability becomes clearly reachable.</P>
<P>The guiding principle can be summarized as: build into the standard only the things that you cannot build on top (there are a few exceptions for very common idioms, of course; those are, well...exceptions). </P>
<P>Folks from Mozilla share this perspective, which is encouraging. Nikunj, the author of the indexed database API, is from Oracle, and supports this sort of by definition, given that he's the editor of the spec. You can see more discussion about this in the <A href="http://lists.w3.org/Archives/Public/public-webapps/" mce_href="http://lists.w3.org/Archives/Public/public-webapps/">webapps working group list archive</A>, including <A href="http://lists.w3.org/Archives/Public/public-webapps/2009OctDec/0449.html" mce_href="http://lists.w3.org/Archives/Public/public-webapps/2009OctDec/0449.html">this post</A> where I outlined Microsoft's take.</P>
<P><STRONG>We're exploring</STRONG></P>
<P>We are working on understanding the API, providing feedback to the W3C WebApps working group, and creating experimental implementations to explore the space, try it out in applications and discover good and bad things about it.</P>
<P>-pablo</P>
<P>* NOTE: I refer here to HTML5 kind of loosely to refer to the "next round of HTML technology". There are actually several specs involved in addition to the core HTML5 spec itself<BR></P>]]></content:encoded>
    </item>
    <item>
      <title>Every SharePoint 2010 server is a Data Services server</title>
      <link>https://docs.microsoft.com/archive/blogs/pablo/every-sharepoint-2010-server-is-a-data-services-server</link>
      <pubDate>Mon, 19 Oct 2009 23:26:00 GMT</pubDate>
      <dc:creator><![CDATA[Pablo M. Castro]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pablo/2009/10/19/every-sharepoint-2010-server-is-a-data-services-server/</guid>
      <description><![CDATA[I haven't been writing much here, mostly because I've been way too busy but also because I couldn't...]]></description>
      <content:encoded><![CDATA[<P>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 <A href="http://www.microsoft.com/presspass/press/2009/oct09/10-19MSSharePointConf09PR.mspx" target=_blank mce_href="http://www.microsoft.com/presspass/press/2009/oct09/10-19MSSharePointConf09PR.mspx">SharePoint 2010 has been announced</A> and its feature set published everywhere, I can finally discuss one of the coolest things we've been up to lately.</P>
<P>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. </P>
<P>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.</P>
<P>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 <A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a71060eb-454e-4475-81a6-e9552b1034fc&amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a71060eb-454e-4475-81a6-e9552b1034fc&amp;displaylang=en">ADO.NET Data Services v1.5 CTP2</A>. We'll put details out there for future iterations as they come.</P>
<P><A href="http://blogs.msdn.com/astoriateam/archive/2009/10/19/share-your-data-across-data-sources-sharepoint-sql-server-azure-reporting-services-etc-applications-net-silverlight-excel-etc-using-data-services.aspx" target=_blank mce_href="http://blogs.msdn.com/astoriateam/archive/2009/10/19/share-your-data-across-data-sources-sharepoint-sql-server-azure-reporting-services-etc-applications-net-silverlight-excel-etc-using-data-services.aspx">Official write up</A> in the Astoria team blog.</P>
<P>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.</P>
<P>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 <A href="http://blogs.msdn.com/pablo/archive/2008/11/01/ado-net-data-services-in-windows-azure-pushing-scalability-to-the-next-level.aspx" target=_blank mce_href="http://blogs.msdn.com/pablo/archive/2008/11/01/ado-net-data-services-in-windows-azure-pushing-scalability-to-the-next-level.aspx">discussed here</A> some time ago.</P>
<P>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 <A href="http://blogs.msdn.com/gemini/archive/2009/09/24/data-feeds.aspx" target=_blank mce_href="http://blogs.msdn.com/gemini/archive/2009/09/24/data-feeds.aspx">here</A>). On the client, in addition to developer-oriented options such as .NET, Silverlight, AJAX, PHP, Java and more, we now also have <A href="http://www.powerpivot.com/" target=_blank mce_href="http://www.powerpivot.com/">PowerPivot</A> (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.</P>
<P>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.</P>
<P>I'll be talking about this at the <A href="http://www.mssharepointconference.com/" target=_blank mce_href="http://www.mssharepointconference.com">SharePoint conference 2009</A>&nbsp;in Las Vegas this week, and at the <A href="http://microsoftpdc.com/" target=_blank mce_href="http://microsoftpdc.com/">Professional Developer Conference (PDC 2009)</A> in late November. If you're attending any of these and this sounds interesting, these sessions will drill into plenty of details.</P>
<P>-pablo</P>
<P mce_keep="true">&nbsp;</P>]]></content:encoded>
    </item>
    <item>
      <title>We're on a roll: Java client for Data Services announced</title>
      <link>https://docs.microsoft.com/archive/blogs/pablo/were-on-a-roll-java-client-for-data-services-announced</link>
      <pubDate>Mon, 28 Sep 2009 21:14:00 GMT</pubDate>
      <dc:creator><![CDATA[Pablo M. Castro]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pablo/2009/09/28/were-on-a-roll-java-client-for-data-services-announced/</guid>
      <description><![CDATA[Just a few weeks after announcing the PHP toolkit for Data Services we now are happy to announce a...]]></description>
      <content:encoded><![CDATA[<P>Just a few weeks after announcing the PHP toolkit for Data Services we now are happy to announce a Java toolkit for consuming Data Services that follow the Astoria RESTful data services pattern. The library ships as an extension to the existing Java Restlet library. I'm really happy to see more and more clients and servers come up that can be used to share data between systems.</P>
<P>You can <A href="http://blogs.msdn.com/interoperability/archive/2009/09/28/new-bridge-broadens-java-and-net-interoperability.aspx" mce_href="http://blogs.msdn.com/interoperability/archive/2009/09/28/new-bridge-broadens-java-and-net-interoperability.aspx">check out the announcement</A> in the Interoperability's Team blog. </P>
<P>-pablo</P>
<P mce_keep="true">&nbsp;</P>]]></content:encoded>
    </item>
    <item>
      <title>ADO.NET Data Services v1.5 CTP2!</title>
      <link>https://docs.microsoft.com/archive/blogs/pablo/ado-net-data-services-v1-5-ctp2</link>
      <pubDate>Tue, 01 Sep 2009 14:27:00 GMT</pubDate>
      <dc:creator><![CDATA[Pablo M. Castro]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pablo/2009/09/01/ado-net-data-services-v1-5-ctp2/</guid>
      <description><![CDATA[Yesterday we announced that the CTP 2 of the ADO.NET Data Services framework (yeah, Astoria) is...]]></description>
      <content:encoded><![CDATA[<P>Yesterday we announced that the CTP 2 of the ADO.NET Data Services framework (yeah, Astoria) is available for download. We put in a ton of work on this release, ranging from adding better support for high-end services to making it easier to write applications in Silverlight by having cross-domain and proper data-binding support.</P>
<P>Official announcement is <A href="http://blogs.msdn.com/astoriateam/archive/2009/08/31/ado-net-data-services-v1-5-ctp2-now-available-for-download.aspx" mce_href="http://blogs.msdn.com/astoriateam/archive/2009/08/31/ado-net-data-services-v1-5-ctp2-now-available-for-download.aspx">here</A>, and includes details on where to download from, what to watch for (it's still a CTP, comes with fine-print :) ), and a list of the new and updated features.</P>
<P>Also, many folks in the Astoria Team have been writing a bunch of content to cover the new features, so watch the <A href="http://blogs.msdn.com/astoriateam/" mce_href="http://blogs.msdn.com/astoriateam/">Astoria Team blog</A> as well as related blogs for all sorts of samples and details to come up.</P>
<P>-pablo</P>
<P mce_keep="true">&nbsp;</P>]]></content:encoded>
    </item>
    <item>
      <title>PHP toolkit for ADO.NET Data Services</title>
      <link>https://docs.microsoft.com/archive/blogs/pablo/php-toolkit-for-ado-net-data-services</link>
      <pubDate>Fri, 21 Aug 2009 12:42:00 GMT</pubDate>
      <dc:creator><![CDATA[Pablo M. Castro]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pablo/2009/08/21/php-toolkit-for-ado-net-data-services/</guid>
      <description><![CDATA[Folks in the interoperability team at Microsoft just announced something they've been cooking for a...]]></description>
      <content:encoded><![CDATA[<P>Folks in the interoperability team at Microsoft just announced something they've been cooking for a while, developed&nbsp;<A href="http://www.persistentsys.com/" mce_href="http://www.persistentsys.com/">Persistent Systems</A>: a client PHP toolkit for Astoria services. It follows more or less the model of the .NET client where you can run a tool during development to get code-gen based on a data service metadata, and then it has a runtime library that can be used to send queries, obtain responses as PHP objects, track and submit changes, etc. They implemented both the Atom and JSON formats, and even threw in batching support. </P>
<P>The best part is that it's all written in PHP (both code-gen tool and runtime), so it runs in any environment where PHP and the toolkit dependencies (XML, XSLT, CURL) are available.</P>
<P>For more details check out the <A href="http://blogs.msdn.com/interoperability/archive/2009/08/21/a-new-bridge-for-php-developers-to-net-through-rest-php-toolkit-for-ado-net-data-services.aspx" mce_href="http://blogs.msdn.com/interoperability/archive/2009/08/21/a-new-bridge-for-php-developers-to-net-through-rest-php-toolkit-for-ado-net-data-services.aspx">post in the interoperability team's blog</A>, the kick off&nbsp;<A href="https://channel9.msdn.com/posts/jccim/Consuming-data-over-the-web-between-PHP-and-NET-with-REST-and-ADONET-Data-Services/" mce_href="https://channel9.msdn.com/posts/jccim/Consuming-data-over-the-web-between-PHP-and-NET-with-REST-and-ADONET-Data-Services/">Channel 9 video</A>, and the <A href="http://phpdataservices.codeplex.com/" mce_href="http://phpdataservices.codeplex.com/">PHP toolkit project</A> in codeplex.</P>
<P>-pablo</P>
<P mce_keep="true">&nbsp;</P>]]></content:encoded>
    </item>
  </channel>
</rss>