datastack - 基于koa的RESTful框架

项目地址: https://github.com/RobinQu/datastackmysql

对开发者友好的轻量级RESTful中间件,基于koa。git

我会陆续放出一下tutorials,这篇文章纯属datastack 101,但愿勾起你们的兴趣。github

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.jsredis

datastack自带的组件便可实现将事件的CRUD操做经过广播,在客户端:sql

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等),让你快速实现简洁的消息体系。mongodb

Data store

默认是利用mongo的,但相信不是每一个人都喜欢mongo。事实上,经过实现本身的Storage类,你能够接入任何持久化方案。json

例如,为测试而写的MemoryStore: https://github.com/RobinQu/datastack/tree/master/src/storage/memory缓存

只需在建立datastack时给定storage属性,sass

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,它有以下优点:安全

  1. 更多API shortcut
  2. 提供对cluster的一些支持(事件消息传播等)
  3. 代码会更简洁

一个简单的例子:

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出来以后就在计划这个,可是写的好没动力。目前大部分架构已完成,如今的任务:

  1. 写更多的测试
  2. 更多的存储方案(redis, mysql, 以及混合存储,即多级缓存)
  3. 安全认证, 目前仅有有BasicAuth方案
  4. 消息通信
    4.1 更多渠道(APN、mail)
    4.2 更多底层通信方式 (zmq, AMQ)

datastack已经在个人我的项目中使用,但数量级还不够证实它的稳定性。

贡献

固然是越多越好了,datastack里面已经有不少打开的issues了。

相关文章
相关标签/搜索