datastack - 基于koa的RESTful框架
发布于 6个月前 作者 RobinQu 418 次浏览

项目地址: 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,它有如下优势:

  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了。

3 回复

赞一个 好像依赖好多

@slightboy 用koa之后都这样,大部分都是koa插件。

回到顶部