(30 hackdays day 27) CloudRail - 云存储的POSIX

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

API

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用的。服务器

Price

官网的说法是'Integrations to Cloud Storage Providers will be free forever.',So...他们怎么活下来...框架

StrongLoop

最后,提一下以前用过的Nodejs框架。其中有一个很好用的功能,Auto generate SDK。在后端建立一个数据Model之后,Grunt一下就会自动把这个Model的访问代码。好比Angular的版本生成一个访问该Model的Service。ide

图片描述

提到这个缘由是,Nodejs+browser这样的脚本语言组合太适合WebApp的开发了,这样组合所带来的灵活性也带来了不少新的可能。像CloudRail,StrongLoop这样动态接口比原来那些“死板”的接口通讯拥有更强大的整合能力。也许之后就会出现一批服务,专门负责接口的维护,而文中这类技术就是这种服务的基础。不过CloudRail还会遇到不少问题,诸如版本管理,平台支持能力等。工具

另外,CloudRail也是个国际团队,总部在德国的曼海姆,在旧金山也有办公室,公司内竟然有幼儿园...oop

相关文章
相关标签/搜索