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

圖1. IE 9顯示了Northwind采樣數(shù)據(jù)庫中50個(gè)訂單明細(xì)記錄的第一個(gè)0Data源。
由圖1可見,0Data是一個(gè)開銷大量XML資源的冗長協(xié)議。第一批50個(gè)訂單明細(xì)記錄的條目長度為65,536字節(jié)。在$format=json的附加查詢選項(xiàng)下,SDK采樣只讀Northwind服務(wù)供應(yīng)商訂單明細(xì)表的URI返回的第一個(gè)Order_Details項(xiàng)的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個(gè)JSON項(xiàng)使用了29,859字節(jié),是AtomPub版的45.6%.對SQL Azure實(shí)驗(yàn)室的0Data服務(wù)的查詢,最多返回50個(gè)條目。如果數(shù)據(jù)源超過50行,由$skiptoken指定跳過若干條目,從連續(xù)數(shù)據(jù)頁開始。微軟公司于6月29日宣布了MIT許可下data.js的可用性,適用于本地存儲(chǔ)0Data和HTML 5 功能的JavaScript庫。
WCF數(shù)據(jù)服務(wù)是0Data的一個(gè)。NET客戶(消費(fèi)者)庫,這是一個(gè)Visual StudioLightSwitch 應(yīng)用程序的可選數(shù)據(jù)源。Windows Azure SDK的Microsoft.Windows.Azure.StorageClient庫是另外一個(gè)0Data ADO.NET集合數(shù)據(jù)源的。NET客戶庫。截至2011年6月,供應(yīng)商提供對Silverlight 4, PHP, Java, Ruby, Objective-C (iPhone), Android, Windows Phone 7, .NET Compact Framework 3.5, Joomla 以及Drupal等額外客戶庫的鏈接。
當(dāng)前,0Data生產(chǎn)者包括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還提供了與服務(wù)器庫的鏈接,從而實(shí)現(xiàn)創(chuàng)建0Data生產(chǎn)者。截至2011年6月,生產(chǎn)商庫支持。NET Framework 3.5 SP1、 .NET Framework 4.0、odata4j (Java)、Rails OData (一個(gè)Ruby的預(yù)發(fā)布版)和MySQL OData.

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