一个简单的 Restful API 生成器 restal - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qiuyk

一个简单的 Restful API 生成器 restal

  •  
  •   qiuyk 2017 年 9 月 27 日 4283 次点击
    这是一个创建于 3131 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这是之前写一个项目用到的小工具,给 API 服务器自动生成 Restful 风格的接口。最近整理出来,写了点测试就放 github 上了。支持的 HTTP 方法有 GET、POST、PUT、PATCH、DELETE,实现的功能其实也很简单,就是基本的 CURD,只不过给标准化了而已。当然还保留 Express 的中间件,如果标准化操作不符合要求可以拦截或进一步操作。

    详细的介绍还是看 README 吧,这里贴一下基本用法。

    // 在使用前先建立好 express app 和需要用到的 mongoose model // 引入 Restal 类 const Restal = require('restal') // 使用 mongoose model 创建一个 Restal 实例,并挂在到对应的 resource uri 上,就会生成对应的 api const postApis = new Restal(post, '/post') // 把 api 注入到 express app 中(或者说把路由导入到 express app 里) postApis.inject(app) 

    当然,你也可以通过 express 中间件修改默认处理

    // ----+----+----+---------+----+----+---- // preHandle -> ... | f2 | f1 | handler | f1 | f2 | ... <- postHandle // ----+----+----+---------+----+----+---- // 添加预处理中间件拦截或预处理请求 postApis.preHandle('get', (req, res, next) => { const postModel = postApis.model const postUri = postApis.uri // 进行处理,例如权限验证等 // 如果不调用 next()则拦截并阻止了默认处理 // 但你需要自己响应请求 next() }) // 添加后处理中间件对数据进行后处理 postApis.postHandle('get', (result, req, res, next) => { const postModel = postApis.model const postUri = postApis.uri // 进行处理,例如数据处理等 // 如果添加了后处理中间件,默认处理将不响应请求,并 // 通过 result 参数向后处理中间件传递原响应结果,因此你 // 需要自己响应请求 res.status(200).send(result) }) 

    Github 地址:https://github.com/Siubaak/restal

    代码一般,默默的求 star。

    2 条回复    2017-09-27 11:52:04 +08:00
    EricJia
        1
    EricJia  
       2017 年 9 月 27 日
    之前写的
    ```js
    /**
    * @author eric
    * @version 1.0.0
    */

    // const allow = ['index', 'show', 'create', 'update', 'delete'];

    export default class Base {
    constructor (router) {
    this.router = router
    }

    resources (resource = '', cOntroller= {}, functiOns= []) {
    const router = this.router

    const resolve = function (req, res) {
    res.send('not opened')
    }

    const {
    index = resolve,
    show = resolve,
    create = resolve,
    update = resolve,
    del = resolve
    } = controller

    router.get(resource, functions, index)
    router.get(`${resource}/:id`, functions, show)
    router.post(resource, functions, create)
    router.put(`${resource}/:id`, functions, update)
    router.patch(`${resource}/:id`, functions, update)
    router.delete(`${resource}/:id`, functions, del)
    return this
    }
    }
    ```
    qiuyk
        2
    qiuyk  
    OP
       2017 年 9 月 27 日
    @EricJia 学习了~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5224 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 48ms UTC 08:00 PVG 16:00 LAX 01:00 JFK 04:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86