11 月 22 日更新:今天上传了新的版本,主要调整了路由编写的语法。以前是链式语法:
route('/users', :post)
.title('创建一个新用户')
.params {
param :user, type: 'object', using: UserEntity
}
.do_any {
# 这里实现你的业务逻辑 ...
}
.if_status(201) {
expose :user, type: 'object', using: UserEntity
}
现在改成块状语法:
post '/users' do
title '创建一个新用户'
params {
param :user, type: 'object', using: UserEntity
}
status(201) {
expose :user, type: 'object', using: UserEntity
}
action {
# 这里实现你的业务逻辑 ...
}
end
第二是重新编写了文档,以教程的形式循序渐进地讲解,请看 教程。比较重要的章节是有关实体定义的,请看实体定义。
零零总总写了有半年了,虽然现在并不是一个发布的好时机,但是想要先分享出来和大家伙交流一下想法。本来打算先在公司用起来的,不过最近公司没有什么新项目,老项目我也不想换框架了,人力物力呀…… 所以只在自己的个人项目下应用了,目前运转良好。
又是一个轮子,只不过有些不一样的地方。
首先,思想上它是完全面向 API 文档的。也许好多团队写文档会借助于 YAPI 这样的第三方工具,或者直接用 Postman 这样用用例来说话,再不济手写 Markdown. 我在框架里直接生成了 OpenAPI 的规格文档,在开发者实现接口的同时,文档就生成了。例如像下面这样定义一个接口,同时文档就能生成了:
route('/users', :post)
.title('创建一个新用户')
.params {
param :user, type: 'object', using: UserEntity
}
.do_any {
# 这里实现你的业务逻辑 ...
}
.if_status(201) {
expose :user, type: 'object', using: UserEntity
}
其次,这次将参数和返回值的写法统一起来了。像上面,我们只用了一个 UserEntity
,就可以同时定义参数和返回值了,再也不用写两遍了。你的 UserEntity
内部可能是这样写的:
class UserEntity
property :id, type: 'integer', param: false # 只返回
property :password, type: 'string', render: false # 只用作参数
property :name, type: 'string,
property :age, type: 'integer'
end
其他的功能还有很多,就不想一一列举了。想进一步了解的,可以去看 GitHub 仓库:
这个框架适合纯 API 后端的场景,即前后端分离。也比较适合团队,基本用一种固定的写法构建 API. 重点是生成对应的文档,前后端不再扯皮(你的文档是这么定义的,怎么你返回的数据是长这样啊之类的云云)。
说实话最近整体的工作节奏都有些慢,受大环境的影响吧。本来打算等到我稳定运行后再发布了,但是这可能还要一阵子,就先预先发布一下看看反馈再说。现在大家运行起来可能有点吃力,因为还缺一个项目脚手架,后面会补上。
如果觉得对你有用,还望支持一下,对我回复个 +1. 如果大家热情足够的话,因为涉及到文档,我感觉上手难度还是有的,到时会建个 QQ 群或微信群做全面的答疑。如果大家热情不高,我就当成一个小众项目在我的团队里使用吧。视反馈而定。