使用Odata API連接云計算數據源
半結構化數據集成是新興Web 2.0 API集合所面臨的主要挑戰之一。無論數據是源自于一個客戶的應用程序或者是企業網絡服務,尋找其最常見的數據共同特性是十分必要的,從而確保本地運行的服務或云計算服務能夠互相了解。
RESTful開放式數據協議--即為更多人所知的OData API –有可能實現基于云計算企業軟件即服務產品和平臺即服務項目的互相聯系,從而成就其“大數據”服務,如整個Netflix的電影目錄以及Windows Azure市場的DataMaret.
結構化數據源--例如關系型數據庫、電子表格以及包含逗號分隔符的數值文件--主要依賴于無所不在的開放式數據庫連接(ODBC)的數據訪問API,這一API集合是由微軟公司繼承SQLAccess集團公司的調用級接口(CLI)并于1992年發布的。Sun Microsystems公司于1997年發布了Java數據庫連接(JDBC) v1版API,并在之后將其添加至Java標準版產品中。一個JDBC-ODBC的接口可確保JDBC能夠訪問ODBC類數據庫。ODBC和JDBC API可以處理SQL對表格式數據的 SELECT查詢,以及INSERT、UPDATE和DELETE等操作,并可執行已被存儲的批處理操作。微軟公司的OLE數據庫和ActiveX數據對象(ADO)于1996年底開始作為微軟數據訪問組件(MDAC)的一部分補充ODBC.但是ODBC和JDBC仍然還是客戶端/服務器環境下的結構化數據連接混合語言。
隨著大量基于網絡HTML和XHTML文件半結構化數據的廣泛應用,業內對于網絡友好、能夠訪問ODBC/JDBC云計算兼容的數據訪問API的需求也甚囂塵上。Dave Weiner2002年發布了Really Simple Syndication (RSS) 2.0 API,該API是他從Netscape公司的RDF Site Summary和Rich Site Summary API中派生出來的。Wikipedia將RSS描述為一個用于經常性更新發布工作(例如博客、新聞頭條、音頻和視頻)的消息源的標準化格式。
1993年,Sam Ruby設立了一個討論RSS改良的Wiki,吸引了大量的網絡應用程序開發人員和內容供應商。Wiki的成員于2003年發布了Atom v0.2和v0.3;而Google公司將Atom作為其Blogger、Google News和Gmail的統一格式。2004年,互聯網工程任務組(IETF)成立了由Tim Bray和Paul Hoffman主導的AtomPub工作組,用以實現Atom格式的標準化。2005年底,IETF為Atom 統一格式v1.0發布了一個IETF REC 4287的建議標準,并于2007年10月為Atom發布協議(AtomPub)發布了一個RFC 5023的建議標準。Google公司的GData格式就是基于Atom和AtomPub v1.0的。
在2007年四月拉斯維加斯召開的MIX07大會的“在云計算中訪問數據服務”專題會議上,微軟公司數據架構師Pablo Castro提出了一個代號為“Astoria”基于AtomPub的網絡數據訪問擴展。這些服務的設計目的是:
Web友好,并不僅僅是普通的HTTP
針對不同模式的統一模式
關注數據,而非其格式
保持高層次,存儲抽象化
Astoria的主要功能之一就是能夠通過統一的資源標識符訪問任何的數據元素(被稱為實體)以及通過在相關圖形中導航訪問相關實體。微軟公司的實體數據模型v1定義了可用實體,其中包括數據類型及其其他相關信息。Astoria團隊還指定了URI兼容的查詢選項,以實現篩選、排序、分頁和導航等功能。
最初,Astoria曾支持純XML(POX)、RDF+XML以及JavaScript Object Notation (JSON)格式。之后,在2008年二月Astoria團隊開始考慮使用AtomPub和Web3S來代替POX和RDF+XML,設定AtomPub作為默認選項,JSON作為AJAX應用程序的替代格式。2008年五月微軟公司推出Astoria作為ADO.NET Data Services Framework Beta 1,它與ADO.NET Entity Framework Beta 1一起作為。NET 3.5 Beta 1和Visual Studio 2008 SP1的組件。在2009年十一月召開的微軟專業開發人員大會2009上,Astoria的名稱也從ADO.NET Data Services改為Windows Communication Foundation (WCF) Data Services.而在2010年年初,微軟公司又將ADO.NET Data Services的格式更名為OData.#p#
那么到底何為OData?
開放式數據協議是一個基于REST用于對配置為“數據服務”的網絡可訪問資源集合執行創建、讀取、更新和刪除(CRUD)等操作的協議。微軟公司于2010年三月建立了OData.org網站并于次年五月發布了當前的[MS-ODATA]:開放式數據協議(0Data)規格發布于2011年5月。
根據0Data常見問題中的說法,“0Data可能會在未來某個時候根據來自于社區的反饋而提交給一個標準組織。在此期間,開放式數據協議規格符合微軟公司的開發規范承諾(OSP),它允許包括開源項目在內的第三方在任何運行時和客戶使用服務時建立數據服務。”
最流行的瀏覽器可直接顯示0Data源。如圖1所示,一個SDK采樣只讀Northwind服務的訂單明細表的URI返回第一Order_Details項的AtomPub代表。

圖1. IE 9顯示了Northwind采樣數據庫中50個訂單明細記錄的第一個0Data源。
由圖1可見,0Data是一個開銷大量XML資源的冗長協議。第一批50個訂單明細記錄的條目長度為65,536字節。在$format=json的附加查詢選項下,SDK采樣只讀Northwind服務供應商訂單明細表的URI返回的第一個Order_Details項的JSON表示如下:
{ “d” :{ “results”:[ { “__metadata”:{ “uri”:“https://odata.sqlazurelabs.com/OData.svc/v0.1/jc650b4zaf/Northwind/Order_Details(OrderID=10248,ProductID=11)”, “type”:“Northwind.Order_Details” }, “Discount”:0, “OrderID”:10248, “ProductID”:11, “Quantity”:12, “UnitPrice”:“14.0000”, “Order”:{ “__deferred”:{ “uri”:“https://odata.sqlazurelabs.com/OData.svc/v0.1/jc650b4zaf/Northwind/Order_Details(OrderID=10248,ProductID=11)/Order” } }, “Product”:{ “__deferred”:{ “uri”:“https://odata.sqlazurelabs.com/OData.svc/v0.1/jc650b4zaf/Northwind/Order_Details(OrderID=10248,ProductID=11)/Product” } } }, …
第一批50個JSON項使用了29,859字節,是AtomPub版的45.6%.對SQL Azure實驗室的0Data服務的查詢,最多返回50個條目。如果數據源超過50行,由$skiptoken指定跳過若干條目,從連續數據頁開始。微軟公司于6月29日宣布了MIT許可下data.js的可用性,適用于本地存儲0Data和HTML 5 功能的JavaScript庫。
WCF數據服務是0Data的一個。NET客戶(消費者)庫,這是一個Visual StudioLightSwitch 應用程序的可選數據源。Windows Azure SDK的Microsoft.Windows.Azure.StorageClient庫是另外一個0Data ADO.NET集合數據源的。NET客戶庫。截至2011年6月,供應商提供對Silverlight 4, PHP, Java, Ruby, Objective-C (iPhone), Android, Windows Phone 7, .NET Compact Framework 3.5, Joomla 以及Drupal等額外客戶庫的鏈接。
當前,0Data生產者包括SAP NetWeaver 2.0 Gateway、IBM Web Sphere、GeoREST、Microsoft Excel (通過PowerPivot)、 SharePoint 2010以及SharePoint Online (參見圖2)、SQL Azure、Windows Azure Table Storage、 Windows Azure Marketplace DataMarket,、SQL Server Reporting Services以及Dynamics CRM.0Data SDK還提供了與服務器庫的鏈接,從而實現創建0Data生產者。截至2011年6月,生產商庫支持。NET Framework 3.5 SP1、 .NET Framework 4.0、odata4j (Java)、Rails OData (一個Ruby的預發布版)和MySQL OData.

圖2. IE 9顯示了Northwind采樣數據庫中插入SharePoint Online列表項1000個訂單明細記錄的第一個0Data源。(SharePoint限制查詢最多1000項。)
盡管0Data目前的關注重點仍然是微軟,但0Data也顯示了在其他開發環境中獲得大量占有率的趨勢,特別是Java和Ruby的消費者和生產者庫目前都可用。如果你需要從本地和基于云計算的眾多源連接企業數據,請試一下0Data.毫無疑問,0Data將開始成為網絡世界的ODBC.