Kraken:PayPal公司的开源Node.js框架
PayPal 是一项全球流行的网上支付服务,近期它发布了一款 Node.js Web 开发框架:Kraken。
Kraken 基于 grunt 和 Express, 相比而言,它提供了更加稳健的功能合集,支持本地化、环境配置、更加注重应用程序安全等。这里解释下,Express 是 Node.js 的一个 MVC 开发框架,支持 jade 等多种模板,是目前 Node.js 上最流行的 Web 开发框架,通过提供一系列强大特性帮助开发者创建各种 Web 应用。
Kraken 项目
为什么会有 Kraken?
之前,PayPal 公司长期存在着“非我所创” 的文化,这导致 PayPal 采用新技术的态度很消极,项目开发进度也极其缓慢。正是由于 PayPal 行动缓慢,其他支付服务商 Stripe 和 Square 趁机成长,逐渐撼动 PayPal 的市场地位。同时,PayPal 当时的开发技术也已经无法满足快速开发的需求,因为当时的开发基本全是 Java,不需要用 Java 来实现的也会用 Java 完成。
2012 年 4 月,David Marcuss 成为 PayPal 的总裁,并任命工程师团队在 6 周内完成支付系统的重写。大家应该清楚下,该支付系统是为 PayPal 带来 35 亿美元收入的系统。最终,工程师团队用了 8 周时间完成了该项任务,他们选择了 Node.js 对系统进行重新开发。当然,PayPal 的其他大量的子系统还需要整合到 Node.js 系统,所以起初 Node.js 仅是一个快速开发原型架构。
后来,PayPal 越来越多的新开发都逐渐采用 Node.js 和其他开源软件来完成,这就促成了一个可以快速开发 Web 应用的 Kraken.js 项目的诞生。
下面我们对 Kraken 的框架结构和特点进行简单的总结分析,希望能够帮助大家更好地了解 Kraken。
框架结构
Kraken 框架套件包括多个部分,Kraken.js 仅是该框架的主体部分。该框架还包括其他模块(可独立使用):
- lusca:支持 Express 的应用程序安全模块
- makara:支持 Dust.js 的国际化(i18n)模块
- Adaro:支持 Express 的一款 Dust.js 视图渲染器
- Kappa:NPM 代理插件
除了上述可以独立使用的模块之外,Kraken 套件还包括了一系列的依赖和实用工具:
- Generator-kraken:Yeoman 生成器
- Enrouten:用于 Express 的路由(route)配置中间件(初始化与配置模块)
- Kraken-devtools:Kraken 应用程序开发所需的工具合集
特点
通过前面的介绍,我们已经基本了解了 Kraken 究竟是怎么一回事儿,那 Kraken 到底具有哪些吸引开发者的特点呢?
1. 项目结构清晰
Kraken 将生成的项目的配置、内容和模板、路由逻辑(routing logic)放在了不同的位置,方便开发者对文件进行组织和管理。下面,我们详细了解下 Kraken 所创建项目的基本结构:
- /config,存放应用程序和中间件配置
- /controllers,控制器
- /lib,存放开发者自定义的库文件和其他代码
- /locales,特定语言内容
- /models,模型
- /public,公共的网络资源
- /public/templates,服务器和浏览器端模板
- /test,存放单元和功能测试用例等。
- index.js,应用程序入口文件
随着项目的不断成长,这种组织方式和策略对开发者来说会更加友好。
2. 良好平衡开发环境与生产环境
Kraken 的配置文件为 /config/app.json,它会在运行时加载文件中包含的键值对。全部的应用程序配置均存放在这一个文件中,大大方便了开发者。/config/middleware.json 则是自定义的中间件配置文件。
说起开发环境与生产环境,二者通常在端口号、主机名等方面的参数设置会有不同,Kraken 允许创建开发模式下使用的配置文件,如 /config/app.json 为生产环境下的配置,/config/app-development.json 则是开发环境下的配置,然后可以通过自定义环境变量(定义环境变量 NODE_ENV 为 production 或 development)来控制要加载哪个配置文件。如此一来,可以方便开发者在生产环境和开发环境进行快速切换!
3. 注重安全
通过 Lusca 模块来为安全保驾护航,并遵循 OWASP 安全原则,同时也默认为全部调用启用了几个请求/响应头文件:
- 跨站请求伪造(CSRF)标头
- 内容安全策略(CPS)标头
- 隐私优先项目平台(P3P)标头
- X-FRAME-OPTIONS 防止点击劫持
4. 其他
同时,它还有下面几个特点:
- 路由(route)与逻辑(logic)分离:方便程序运行失败时快速锁定问题。
- 模板(template)共用:Kraken 选用 Dust 作为模板语言,同时在服务器端和客户端使用了同一个模板,如此一来,就可以做到代码复用。
- 支持本地化: Kraken 可以在运行时基于请求上下文来加载内容包(content bundle),所以在模板渲染之前就可以通过添加上下文来给用户提供相应的本地语言支持,大大增强了应用的友好性。
示例与文档
关于 Kraken,官方给出了下面两个示例,可以帮助大家学习和了解:
- 例一:本地化与国际化:给 Web 应用增加多语言支持,让各地用户能够用当地语言来使用 Web 应用
- 例二:部署中间件:创建一个网页计数器,为大家解释在应用生命周期中如何部署中间件
Kraken 是一款开源项目(分发协议为 Apache License v2.0),大家都可以对该项目进行 Fork 和提交修改。它也提供了一份简洁的使用文档。项目源码和文档均可在 Github 页面进行查看。
最后
任何一个项目的诞生都有其产生的背景,也必然有相应的需求驱动。正如 Kraken,正是由于 PayPal 为了满足其快速开发 Web 应用的强烈需求,才选择了 Node.js,才有了这个项目。
同时,我们也需要注意工程师团队中存在的“非我所创”文化,对于新技术要采取积极的态度,不能一成不变,否则将给企业发展带来阻碍。