项目地址: https://github.com/RobinQu/datastack
对开发者友好的轻量级RESTful中间件,基于koa。
我会陆续放出一下tutorials,这篇文章纯属datastack 101,希望勾起大家的兴趣。
TL;DR
var datastack = require("datastack"),
koa = require("koa");
var app = koa();
datastack(app, {
storage: {
type: "mongodb",
uri: "mongodb://127.0.0.1:27017/zoo"
}
});
app.resource("cats");
app.resource("dogs");
app.listen(porcess.env.PORT || 8888);
More fun
Events subscription
https://github.com/RobinQu/datastack/blob/master/spec/ws_subscription_spec.js
datastack自带的组件即可实现将事件的CRUD操作通过广播,在客户端:
var client = new Websocket("ws://localhost:8888/books/_subscription");
client.on("message", function(data) {
//json encoded string
var event = JSON.parse(data);
// event.type === "datastack:create"
// event.data === `storeKey`s of created records
});
通过datastack的notifier体系,可以轻松接驳Apple APN、Google Push Service,或者其他的sass服务(Mailgun、Urban Airship等),让你快速实现简洁的消息体系。
Data store
默认是利用mongo的,但相信不是每个人都喜欢mongo。事实上,通过实现自己的Storage
类,你可以接入任何持久化方案。
例如,为测试而写的MemoryStore
: https://github.com/RobinQu/datastack/tree/master/src/storage/memory
只需在创建datastack
时给定storage
属性,
var koa = require("koa"),
datastack = require("datastack"),
MySuperStorage = require("my-super-storage");
var app = koa();
datastack(app, { storage: new MySuperStorage() });
StackApp
尽管datastack
中大部分的组件都可以利用mixin的方式应用到原生的koa应用实例上,我们也提供一个koa的子类StackApp
,它有如下优势:
- 更多API shortcut
- 提供对cluster的一些支持(事件消息传播等)
- 代码会更简洁
一个简单的例子:
var datastack = require("datastack");
var app = datastack.app({
storage: {
type: "mongodb",
uri: "mongodb://127.0.0.1:27017/datastack-test"
}
});
app.resource("book");
app.resource("author");
var port = process.env.PORT || 8888;
app.listen(port, function() {
console.log("server is up and running");
});
StackCluster
这是一个基于recluster 的封装。假如用到了datastack中的一些高级功能(事件订阅)等,不可避免的涉及到事件在cluster之间同步等问题。而集群之
间的问题,远远不止这一个。StackCluster
是为了解决这些目前我碰到的一些问题,以及未来架构中可能出现的问题而准备的,推荐使用。
一个完整的例子: https://github.com/RobinQu/datastack/tree/master/example/cluster
项目状况
其实在koa出来之后就在计划这个,但是写的好没动力。目前大部分架构已完成,现在的任务:
- 写更多的测试
- 更多的存储方案(redis, mysql, 以及混合存储,即多级缓存)
- 安全认证, 目前仅有有BasicAuth方案
- 消息通讯
4.1 更多渠道(APN、mail)
4.2 更多底层通讯方式 (zmq, AMQ)
datastack
已经在我的个人项目中使用,但数量级还不够证明它的稳定性。