Zino开发框架快速入门

简介: ​本文将以zino仓库下的examples/axum-app为例,详细讲解怎么使用zino框架快速开发一个后端API服务。

本文将以zino仓库下的examples/axum-app为例,详细讲解怎么使用zino框架快速开发一个后端API服务。


首先是使用cargo new axum-app --bin新建一个项目,然后在Cargo.toml中添加以下依赖:

这里我们都使用线上的版本,对于ORM选用MySQL(如果是PostgreSQL就换成orm-postgres)。进而我们在src目录创建controllermodelrouter三个模块(此时mod.rs中都还是空文件),在main.rs中添加以下代码:

注意logs目录是应用运行时自动生成的。运行cargo run(需要nightly工具链),此时已经能正常启动了,在终端里你应该能看到类似于以下的输出:

如果不指定配置文件的话,默认运行端口就是6080。当然,目前我们还没手动注册任何路由,你唯一能看到的就是框架默认注册的OpenAPI文档页面:

下一步我们来添加配置文件。在项目目录下添加config目录(注意不是src目录下,因为配置文件不属于源代码),并为开发环境dev和生产环境prod创建两个配置文件:

这里我们新添加了一个debug服务器标签,绑定端口6070(如果存在debug标签,调试用的API文档路由就会注册到这个对应的端口)。在数据库配置部分,我们指定了数据表创建时的namespace前缀。对于MySQL连接的配置,密码可以先写成明文,实际运行之后终端里会提示你改成框架加密之后的。需要注意的是,zino框架的ORM是惰性连接的,也就是说只有在需要查询的时候才会去连接。


对于配置文件的加载,可以通过cargo run -- --env=prod来指定,也可以设置环境变量ZINO_APP_ENV。如果不指定,运行cargo run时默认为dev,运行cargo run --release时默认为prod


下面我们在model目录下定义两个模型:UserTag。这个写法都是模式化的,我们只以Tag模型为例:

useserde::{Deserialize, Serialize};
usezino::prelude::*;
usezino_derive::{ModelAccessor, ModelHooks, Schema};
#[derive(Debug, Clone, Default, Serialize, Deserialize, Schema, ModelAccessor, ModelHooks)]#[serde(default)]pubstructTag {
// Basic fields.#[schema(primary_key, auto_increment, readonly)]id: i64,
#[schema(not_null, index_type = "text")]name: String,
#[schema(default_value = "Active", index_type = "hash")]status: String,
#[schema(index_type = "text")]description: String,
// Info fields.#[schema(not_null)]category: String,
#[schema(reference = "Tag")]parent_id: Option<i64>,
// Revisions.#[schema(readonly, default_value = "now", index_type = "btree")]created_at: DateTime,
#[schema(default_value = "now", index_type = "btree")]updated_at: DateTime,
version: u64,
}
implModelforTag {
fnread_map(&mutself, data: &Map) ->Validation {
let mutvalidation=Validation::new();
ifletSome(result) =data.parse_i64("id") {
matchresult {
Ok(id) =>self.id=id,
Err(err) =>validation.record_fail("id", err),
            }
        }
ifletSome(name) =data.parse_string("name") {
self.name=name.into_owned();
        }
ifletSome(category) =data.parse_string("category") {
self.category=category.into_owned();
        }
ifletSome(result) =data.parse_i64("parent_id") {
matchresult {
Ok(parent_id) =>self.parent_id=Some(parent_id),
Err(err) =>validation.record_fail("parent_id", err),
            }
        }
validation    }
}

虽然代码略有点长,但思路其实挺简单:就是定义一个结构体,通过自动推导或手动实现这7个trait:Default, Serialize, Deserialize, Schema, ModelAccessor, ModelHooks, Model。实际上,大部分情况下我们往往都只需要手动实现Model,这个决定了怎么从前端传过来的数据来构造模型。当然,Model这个trait也是可以自动推导的,只是目前还没那么完善。


模型里的字段是和数据表对应的,如果数据表不存在则会自动创建,如果新增字段也会自动添加(当然,数据表里的字段可以比模型里的多)。一旦定义好模型,原则上我们可以不用写任何controller就能直接得到增删改查之类的接口,这是通过DefaultController来实现的:

使用起来也很简单,直接在router/mod.rs里引用就行:

当然,具体路由的pathmethod还是要自己指定的,这里用到的就是axum框架标准的路由写法,你也可以选择自行实现一部分controller。如果你还需要一些中间件,也是按照axum框架的标准写法,在这里加载。

最后把这个路由注册到main()函数里就行了:

fnmain() {
zino::Cluster::boot()
        .register(router::routes())
        .run(Vec::new())
}

这样你就已经生成了14个API接口!至于API文档,我们是和实现分离的,需要写到独立的文件里,这个放到以后再讲。

目录
相关文章
|
5月前
|
Prometheus 监控 Cloud Native
Prometheus 入门指南:快速上手
【8月更文第29天】Prometheus 是一个开源的监控系统和时间序列数据库,它特别适合于监控基于微服务架构的应用程序。Prometheus 采用 pull 模式主动从目标系统抓取数据,并且提供丰富的查询语言 PromQL 以便进行数据分析。本文将介绍 Prometheus 的基本概念、架构,并指导您如何快速搭建和配置 Prometheus 服务器。
145 1
|
8月前
|
搜索推荐 API 数据库
开源电子邮件营销平台 listmonk 使用教程
电子邮件营销是海外产品推广的关键,而ESP(电子邮件服务提供商)如Mailchimp和SendCloud等常被用于管理邮件列表和跟踪效果。然而,成本和定制化限制成为问题。为解决这些问题,开源平台如listmonk提供了一种灵活且可定制的解决方案。listmonk用Go语言编写,具备订阅者管理、邮件创建发送、跟踪分析和API集成等功能,特别适合中小企业和大型组织。它还支持一键部署,例如通过Sealos应用商店,使得部署过程变得简单。
273 1
|
8月前
|
Kubernetes Cloud Native Go
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)(下)
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)
168 0
|
Java Go Nacos
Nacos服务注册和发现以及配置管理技术分享,Go中接入非常简单极易上手
Nacos服务注册和发现以及配置管理技术分享,Go中接入非常简单极易上手
|
存储 人工智能 开发工具
绝了,一句话写完一个功能,用Bito初体验。
绝了,一句话写完一个功能,用Bito初体验。
348 0
|
自然语言处理 编译器 Linux
【C++】—— 快速入门(1)
【C++】—— 快速入门(1)
270 0
【C++】—— 快速入门(1)
|
存储 弹性计算 Java
我的阿里云初体验
经过同学的推荐,参加了阿里云的“飞天加速计划·高校学生在家实践 ”,首次体验了阿里云的ECS服务器,整体来说使用体验非常好,也非常推荐大家来使用ECS服务器。
211 0
我的阿里云初体验
|
弹性计算 安全 应用服务中间件
华为云从入门到实战 | 云服务概述与华为云搭建Web应用
云计算在快速发展过程中逐渐形成了不同的服务模式(Service Model)。根据云计算最终服务的交付形态主要分为3种类型,软件即服务、平台即服务与基础架构即服务。从根源上来说,云计算的服务模式来源于面向服务的架构SOA(Service-Oriented Architecture)。所谓SOA,就是一种架构设计模式,其核心是一切以服务为中心,不同的应用之间通信协议都以某种服务的方式定义和完成。在云中部署应用和服务的微服务架构其本质也是由SOA演变而来。
489 0
华为云从入门到实战 | 云服务概述与华为云搭建Web应用
|
Web App开发 JavaScript 安全
Electron快速入门与实践
Electorn是由GitHub开发的一个开源框架,可用于开发桌面应用程序
|
机器学习/深度学习 弹性计算 算法
阿里云初体验
正式开启学习编程,希望能通过阿里云学到本领。从教学例程来看整体的使用过程是非常简单友好的。阿里云的控制台的使用体验是非常不错的,界面的信息都比较简单易懂。感谢阿里云提供这样的资源。
139 0

热门文章

最新文章