Crystal 目前最火的有三个框架
我试用了以上三种,分享些个人的感受:
对以上框架不太满意,而这时公司又有 KPI 指标,于是乎我散失了几个周末不打机的美好时光,开发了以公司名字"云康宝"命名的Runcobo 框架.
如果你听过买过或用过云康宝体脂秤与共享秤,那你已自动成为本框架的终身 VIP 用户
require "runcobo"
class HelloWorld < BaseAction
get "/hello_world"
call do
render_plain "Hello World"
end
end
Runcobo.start
先引入库,然后定义一个 Action,在 Action 中声明接口路径,声明需要渲染”Hello World“,最后启动服务器。
乍一看没啥亮眼的,比不上 Sinatra 的三行情书短小精悍。
但故事才刚刚开始......
class Books::Index < BaseAction
get "/books"
query NamedTuple(author: String)
call do
books = Book.where(author: params[:author])
render_jbuilder "books/index"
end
end
json.array! "books", books do |json, book|
json.book_id book.id
json.author book.author
json.name book.name
json.published_at book.published_at
end
作为一门编译语言搭建的 API 框架,理应参数类型安全。Runcobo 采用参数声明的方式来进行参数解析,从而保证类型安全。与 Kemal、Amber、Lucky 相比,自认为 Runcobo 的参数设计还是比较漂亮的。
URL 类型安全
url NamedTuple(a: String, b: Int32?, c: Bool)
查询参数类型安全
query NamedTuple(a: String, b: Int32?, c: Bool)
表单参数类型安全
form NamedTuple(a: String, b: Int32?, c: Bool)
JSON 参数类型安全
json NamedTuple(a: String, b: Int32?, c: Bool, d: NamedTuple(a: String, b: Int32), e: Array(Int32))
调用方式
params[:a] + params[:b].to_s + params[:d][:a]
如你所见,参数支持嵌套对象、嵌套数组、支持可空,使用上也与 Rails 的参数大致相同,最大的不同便是编译期便确定了参数的类型。Runcobo 采用了宏魔法,使得参数在控制器的展现形式为命名元祖的形式,声明采用命名元组,使用的也是命名元组。(注:命名元组是一种固定大小,不可变的,已知键名及其类型、已知值类型的键值对)
因为需要保证源码安全,需静态编译,目前我司已在分发给第三方定制客户的服务器 SDK(镜像包)使用了该框架。
项目已经发布 1.0.0 版本,如果有想要优化的地方,等你成为贡献者与参与者! 项目地址 https://github.com/runcobo/runcobo/ 欢迎 star
更多文档请查看 https://runcobo.github.io/docs/ ,需科学上网
夜已深,未完待续........