這是一個Mashup的時代,全部你知道的API都將成爲你設計開發新產品的武器。但跟App同樣,太多的選擇反而給開發者帶來了困擾:到底哪家的服務更好,SDK用起來更舒服,之後維護的成本更低?存儲是全部應用都會用到的,Cloudrail的出現正是幫助開發者擺脫SDK選擇困難的工具。html
跟Mashape相似,Cloudrail認爲存儲API應該擁有共通的結構和描述方式。可是,跟Cloud Element的Document hub類應用不同,爲了讓用戶安心,Cloudrail並不用將數據都都通過它的服務器,而是讓用戶直接和存儲服務提供者通訊。經過下面的圖能很清楚看出Cloudrail是怎麼作到的。java
這就是Cloudrail最核心的技術:Self Adapting API。它的做用是保證客戶端隨時得到最新的API提供者的API定義,換句話說,就是保證開發者不用換SDK就能夠持續訪問最新的API(因此叫'No API Updates')。Javascript的實現方法你們都能想到,就是每次都下載新的connector庫。Android呢想想估計是用ClassLoader或者DexClassLoader之類的吧,iOS就不知道了...不過也許經過WebView的js層作一箇中轉也是一個低效率的方案。看了下Download頁面,發現果真Android版本尚未上線,剩下的是Others。只有JS版本的能夠用。不過目前只是Beta嘛,能夠理解~android
CloudRail爲數據存儲服務定義了一系列標準接口,經過一個CloudRailInterface把各家的存儲服務封裝起來。好比Sample代碼中,CloudRail把Dropbox和GoogleDrive的API封裝爲一個CloudRailInterface,經過一個CloudRailClient來統一訪問。其中用戶在不一樣平臺的的標識client_id能夠按照幫助文檔得到到。segmentfault
var CRC = CloudRailClient, CRI = CRC.CloudRailInterface, DBServiceTag = 'Dropbox', GDServiceTag = 'GoogleDrive', userIdentities = [], userIdentitieServiceTags = [], serviceDB, serviceClientDB, serviceGD, serviceClientGD; /* Initialize services */ serviceDB = CRI.initService(DBServiceTag); serviceClientDB = new CRC.ClientIdentity(DBServiceTag, {'client_id': 'abcd'}); // insert here your own client id serviceGD = CRI.initService(GDServiceTag); serviceClientGD = new CRC.ClientIdentity(GDServiceTag, {'client_id': '1234'}); // insert here your own client id /* Read User Identities */ var dbUser = new CRC.NodeIdentifier(CRI.ObjectType.USER_IDENTITY, DBServiceTag), gdUser = new CRC.NodeIdentifier(CRI.ObjectType.USER_IDENTITY, GDServiceTag); CRI.read(dbUser, serviceClientDB, (function(servicetag) { return function(res) { saveUserIdentity(res, servicetag); }; })(DBServiceTag)); CRI.read(gdUser, serviceClientGD, (function(servicetag) { return function(res) { saveUserIdentity(res, servicetag); }; })(GDServiceTag));
目前CloudRail提供了基本的CRUD API,看起來仍是挺通用的。忽然以爲,CloudRail是否是想實現一個雲存儲版的POSIX接口呢。後端
文檔最後提到了一個額外代碼CloudRailClient.Crypto.Hash.SHA256。看來是爲了對文件做Hash用的。服務器
官網的說法是'Integrations to Cloud Storage Providers will be free forever.',So...他們怎麼活下來...框架
最後,提一下以前用過的Nodejs框架。其中有一個很好用的功能,Auto generate SDK。在後端建立一個數據Model之後,Grunt一下就會自動把這個Model的訪問代碼。好比Angular的版本生成一個訪問該Model的Service。ide
提到這個緣由是,Nodejs+browser這樣的腳本語言組合太適合WebApp的開發了,這樣組合所帶來的靈活性也帶來了不少新的可能。像CloudRail,StrongLoop這樣動態接口比原來那些「死板」的接口通訊擁有更強大的整合能力。也許之後就會出現一批服務,專門負責接口的維護,而文中這類技術就是這種服務的基礎。不過CloudRail還會遇到不少問題,諸如版本管理,平臺支持能力等。工具
另外,CloudRail也是個國際團隊,總部在德國的曼海姆,在舊金山也有辦公室,公司內竟然有幼兒園...oop