專案地址: 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
已經在我的個人專案中使用,但數量級還不夠證明它的穩定性。