(30 hackdays day 30) StrongLoop – Javascript全栈框架

SL_Logo_Stacked_RGB.png

StrongLoop是一个基于Nodejs的强大框架,几乎包含了移动开发全栈所需要的所有功能。2013年成立,很少的员工,一个技术驱动,执行力强大的团队。也是在13年我开始接触StrongLoop,当时是为了做nodejs方面的技术选型,看了许多框架,LoopBack是我觉得最酷的一个。我还记得当时是觉得LoopBack的文档太差(主要是跟在线的版本不一样),不知道能活多久所以才放弃了它。时隔一年回来看到这个绿油油的框架,这一年可真是突飞猛进呢。

LoopBackarch7162014-3.png.pagespeed.ce.tUGpVTVgYP.png

全栈框架StrongLoop

StrongLoop基本提供了制作一个移动产品所有的框架和工具,从标准的Backend server,Devops,应用监控,。要想介绍完全StrongLoop的所有产品得写一个长篇连载了,这里只简单的浏览一遍。

  • LoopBack
    一个功能很强大的WebServer框架,隐约看到Spring的影子…

    • SDK
      这是当时我觉得StrongLoop最好用的一点:根据后端Model自动生成对应的前端SDK。
    • RESTful API
      MEAN stack推动了所有新框架默认支持RESTful API,比如Nodejs里的Node-restifySailjs之类的天生就是为了serve API的。StrongLoop还提供了一个用来设计API的工具(beta状态),当然跟RAML比还是差不少的。
    • Data model
      很容易创建数据模型,自动产生对应的RESTful API。
    • Connectors
      当然可以对接各种数据库。
  • StrongLoop Controller
    Debug, Package Management, Build, Deploy, Cluster, Log等等一堆Devops工具。
  • Application Monitor
    一堆监控服务器的模块。
  • mBaaS
    使用StrongLoop,你也可以创建自己的LeanCloud啦,包括Push,地理位置计算(Geopoint),Social Login,User management,各种Replication,Offline sync(离线同步是个好东西),对接各种Stroage云(AWS,Rackspace之类内置了的)。当然,其实这些都是LoopBack里提供的功能,意思是用StrongLoop得永生。

开始

安装StrongLoop sudo npm install -g strongloop
创建一个应用 slc loopback(找个空白的目录哦) 它只会问你项目叫啥。
创建一个Model slc loopback:model (是不是想起了Yo generator~),然后它就会问一堆乱七八糟的问题了。

图片描述

plural指的是RESTful API的route名,一个Model对应的route默认情况下会被plural(复数化),比如Post的路径是Posts。

猜一下,像LeanCloud里类似,这时候应该去访问一个类似127.0.0.1:3000/xxx的地方看到他的后台吧~嗯 xxx=explorer http://127.0.0.1:3000/explorer 就能看到一个用Swagger做的API dashboard。

图片描述

看一下项目的结构,像Meteor一样,LoopBack将JS代码分成服务端(server),前端(client),以及共用部分(common,个人认为这种纯schema的方法比Meteor分割的更清晰)。

略过后面的API Explorer,如何连Database,直接看如何在前端使用刚刚创建出来的API。LoopBack的做法是帮助你创建你当前API的各端SDK,目前只支持Android/iOS/Angularjs。如果你用别的Web框架可能就只能自力更生了。

创建自己的SDK lb-ng server/server.js client/lb-services.js 看看client/lb-services.js,不错吧~

嗯,你的前端工程师需要个文档?执行 lb-ng-doc client/lb-services.js 有时候需要在前面添加sudo(不知道为啥),然后访问 http://localhost:3030/ 就能看到文档啦~这个功能是基于Docular做的。另外,如果你点LoopBack Services进去没东西,别担心,刷新一下。

看看是不是很像早期Angular的文档~

图片描述

API Designer

相信很多程序员喜欢Parsejs或者LeanCloud的原因都是那个图形化界面的Model设计(或者叫API设计)后台。如果前面用的那个”Yo generator”的API creator看起来还不够贴心,你可以试试StrongLoop新推出的StrongLoop Studio beta。

  • 在工程根目录下sudo npm install -g http://get-studio.strongloop.com/strong-studio.tgz 安装Studio。
  • 启动Studio strong-studio,自动打开浏览器
  • 去StrongLoop官网右上角注册个账号(文档里居然写了On the bottom right is a link to go to the registration page on strongloop.com,你们不知道页面很容易改版么…)
  • 用注册的用户名登录进去看到API Composer和Profiler。
  • Bingo!各种玩耍吧!

图片描述

p.s.如果这时候你遇到了类似SyntaxError: Cannot parse package.json: Unexpected token e这样的问题,检查一下你工程根下的package.json里是不是被jslint搞乱了(I dont’t know why…)
好吧好吧,我告诉你这个beta还真是特别beta…尽量不要在之前写过代码的项目里用…

懒人们

如果你缺个可以玩耍的Mongodb:Mongolab
如果你想要个可以协作开发的IDE:Koding
如果你想要个便宜好用的VPS:Digital Ocean
如果你觉得他们家不够便宜:Serverbear
如果你连VPS都不想要,只想部署个Node项目:Nodejitsu
如果你想设计个API尽快给客户端同学,又不想搭Node,找地方部署:Apiary
如果你想做(抄)个APP,又不想花钱雇一堆人:Appdupe

30天结束

这是最后一篇30hackdays啦,终于熬出来了(吁…)。Anyway,这三十天我学到了很多,如何寻找自己想要的服务,如何快速实现原型,如何比较开发者产品的竞品…

回头看,文章的内容肯定没有Shekhar的那篇Learning 30 Technologies in 30 Days: A Developer Challenge写的详尽(确实也没人家投入那么多时间精力),但我选择的技术更广泛(或者叫更乱七八糟),对我也是一种扩展视野的过程。

希望我的这个系列能给大家一些启发。技术并不都是那么深奥难懂,拥抱它也许不能立刻涨工资,但至少在寒冷的日子里,没有wifi,孤独寂寞冷的时候,还可以打开浏览器的console,输入个while,来暖暖手。

下面

嗯,不是你想的那个,也不是用来吃的。之后我会继续时不时写一些发现的好玩的开发者服务;另外,我会写一个StrongLoop的系列文章来介绍这个框架更多的特性,希望大家能够尝试这个迅猛发展的产品。

再做个小广告:最近在做一个小班(免费),专门教高中生技术,直到达成可以自行参加Hackathon的程度。如果身边有高中生对技术感兴趣,欢迎联系我~ fxp007@gmail.com

ok,那些输了的情自行来约~

ec0a6159252dd42af84c70ce003b5bb5c9eab82a.jpg

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

这是一个Mashup的时代,所有你知道的API都将成为你设计开发新产品的武器。但跟App一样,太多的选择反而给开发者带来了困扰:到底哪家的服务更好,SDK用起来更舒服,以后维护的成本更低?存储是所有应用都会用到的,Cloudrail的出现正是帮助开发者摆脱SDK选择困难的工具。

图片描述

Mashape类似,Cloudrail认为存储API应该拥有共通的结构和描述方式。但是,跟Cloud Element的Document hub类应用不一样,为了让用户安心,Cloudrail并不用将数据都都经过它的服务器,而是让用户直接和存储服务提供者通信。通过下面的图能很清楚看出Cloudrail是怎么做到的。

图片描述

这就是Cloudrail最核心的技术:Self Adapting API。它的作用是保证客户端随时获得最新的API提供者的API定义,换句话说,就是保证开发者不用换SDK就可以持续访问最新的API(所以叫’No API Updates’)。Javascript的实现方法大家都能想到,就是每次都下载新的connector库。Android呢想一想估计是用ClassLoader或者DexClassLoader之类的吧,iOS就不知道了…不过也许通过WebView的js层做一个中转也是一个低效率的方案。看了下Download页面,发现果然Android版本还没有上线,剩下的是Others。只有JS版本的可以用。不过目前只是Beta嘛,可以理解~

API

CloudRail为数据存储服务定义了一系列标准接口,通过一个CloudRailInterface把各家的存储服务封装起来。比如Sample代码中,CloudRail把Dropbox和GoogleDrive的API封装为一个CloudRailInterface,通过一个CloudRailClient来统一访问。其中用户在不同平台的的标识client_id可以按照帮助文档获得到。

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。

图片描述

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

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

在WordPress.com的博客.

向上 ↑