fast-api
介绍
基于gin+gorm的极简api服务,真正意义上的轻量级开发框架,内置的api/fast路由组提供了基于 restful风格的默认CRUD操作数据表。
软件架构
gin+gorm,数据库支持mysql、sqlite、postgresql、sqlserver
开发环境
Go1.23.0
安装依赖
go mod tidy
配置文件 /config/application.yml
1. 开启极简 API
api:
port: #端口
fast: true #开启
fastGroup: /fast-api #fast-api的路径前辍,默认为/fast-api
serverName: FastApi #服务名称,可选参数
methods: GET, POST, PUT, DELETE, OPTIONS #允许的请求方式,不填默认所有
disableSnowflakeId: false #禁用雪花ID,默认启用
或指定允许操作的表名为白名单
api:
fast: ["user", "logs"] #开启白名单模式
2. 自定义路由
api:
routes:
- url: /login #绝对路径
method: POST #请求方式
handler: LoginHandler #通过函数处理map的key选择处理函数
3. 设置数据源
api:
datasource:
# prometheus: 支持配置prometheus
config: #gorm的配置,具体选项参考gorm项目文档
prepareStmt: true
allowGlobalUpdate: true
disableAutomaticPing: false
pools: #数据库连接池配置
maxOpenConns: 20
maxIdleConns: 10
connMaxLifetime: 60000
connMaxIdleTime: 600000
connections: #数据库连接设置
databaseName: #数据源名,一般指库名
driver: mysql #数据库类型,支持mysql、sqlite、postgresql、sqlserver
connectString: username:password@tcp(localhost:3306)/dbname
fast-api内置的CRUD 接口
接口请求规则: /fast-api/:db/:table
注: db=数据库名,table=表名
1. 新增数据
接口地址: //${服务地址:端口}/fast-api/:db/:table/create
请求方式: POST
参数格式: json、form表单
注意: 提交字段为文件类型时,该表下必须要有filename字段
2. 更新数据
接口地址: //${服务地址:端口}/fast-api/:db/:table/update
请求方式: PUT
参数格式: json、form表单
注意: 提交字段为文件类型时,该表下必须要有filename字段
3. 删除数据
接口地址: //${服务地址:端口}/fast-api/:db/:table/delete
请求方式: DELETE
参数格式: json、form表单
json示例: {id: 123456} #或 {id: [123456]}
4. 查询数据
接口地址: //${服务地址:端口}/fast-api/:db/:table/read
请求方式: GET
参数格式: json、url参数
json参数示例: {id: 123456}
url参数示例: id=123456
分页参数示例: {
count: false, #是否只返回总数
export: false, #是否导出Excel
page: {
pageSize: 20,
pageIndex: 1,
},
query: [{
id: 2000
}],
orderBy: [{
id: 'desc'
}],
select: ['field1', 'field2'], #选择字段
data: [] #返回数据
}
注意: 分页参数格式只支持json
返回数据: {
result: {
data: [...], #返回查询数据
page: { pageSize, pageIndex, totalPages },
total: 99999,
},
message: 'ok',
errorCode: 0,
}
5. 查询联表数据
接口地址: //${服务地址:端口}/fast-api/:db/:table/read-join
请求方式: GET
参数格式: json、form表单
json参数示例: {id: 123456}
分页参数示例: {
count: false, #是否只返回总数
export: false, #是否导出Excel
page: {
pageSize: 20,
pageIndex: 1,
},
query: [{
id: 2000
}],
"joins": [{ #多表联查
"table": "salary", #表名
"alias": "a", #别名
"joinMode": "inner" #联表方式
}, {
"table": "archives",
"alias": "b",
"joinMode": "Inner",
"onList": [{
"name": "b.id",
"value": "a.archives_id",
"algorithm": "EQ"
}]
}],
orderBy: [{
id: 'desc'
}],
select: ['a.field1', 'b.field2'], #选择字段
}
注意: 分页参数格式只支持json
6. 导入数据
接口地址: //${服务地址:端口}/fast-api/:db/:table/import
请求方式: PUT
参数格式: json、form表单
json参数示例: {fieldName: blob}
7. 下载文件
接口地址: //${服务地址:端口}/fast-api/:db/:table/:field/download
请求方式: GET
参数格式: json、form表单
json参数示例: {id: 123123}