datastack - 基于koa的RESTful框架

项目地址: 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了。

收藏 1分享浏览 2911
4年前
跟帖
李云龙123
2个月前

赞了此话题!

沙发
说几句
广告位 点击查看投放指南

我的收藏