Zino致力于打造Rust语言中最好用的企业级应用开发框架。我们借鉴Node的Egg.js、Go的GoFrame、Java的Spring Boot等框架, 奉行『约定优于配置』的原则,提供开箱即用的功能模块,极大提高开发效率;并通过应用接口抽象与Rust的axum、actix-web等框架集成,打通社区生态资源。
以上摘自:Zino开发框架中文教程
从这个定位上来讲,Zino并不是传统意义上的Web框架,某种程度上可以看成是『框架的框架』(这个词是我从Egg.js那里看到的)。所以,Zino并不与axum、actix-web 、warp、rocket(Rust语言中排名前四的Web框架)等Web框架直接竞争,也无意取代它们;相反,Zino通过应用接口抽象来提供与它们的集成。在zino-core的application模块中,我们定义了以下Trait:
这就是Zino框架的起点!我们只要给其它Web框架实现Application这个Trait,就能把这个框架的功能集成到Zino中,并使应用的启动方式保持一致:
其中第7行代码引入了Application这个Trait,第10行代码中的AxumCluster类型通过实现Application提供了与axum框架的集成,boot函数创建了一个AxumCluster实例。需要注意的是,在一个应用中,boot函数仅且只能调用一次。(最开始boot这个函数先后被命名成new和start,后来我觉得改成boot好像更能传达一些微妙的意思😀)那么,boot函数究竟实现了哪些功能呢?我们来看看它的代码:
可以看到,boot函数实际上就是应用所依赖的系统组件的初始化,包括密钥生成、tracing订阅、metrics采集、HTTP客户端以及可选的HTML模板渲染。顺便提一下,Zino框架的metrics采集内置了prometheus拉取接口:
Application只有两个必须要实现的方法:register和run,其中register用来注册路由,run用来加载异步cron任务并运行应用。因为异步cron任务的执行涉及到异步运行时的选择,而zino-core本身并没有限定只能使用特定的运行时(虽然大部分情况下还是会优先选择tokio),所以需要实现者自行在run方法的实现中指定。对于同步cron任务,不涉及到异步运行时的选择,我们就在Application的spawn方法中提供了默认实现:
Application提供的其它方法都比较简单,有兴趣的Rustacean可以直接阅读源代码。更多内容可以关注我们的微信公众号:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。