这是一个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