官方文档api-demo教程部分网址如下:
api demo 代码生成 | go-zero Documentation
官方demo的架构如下:
编辑
etc包下:
demo-api.yaml
编辑
服务名称:demo-api
HOST地址:0.0.0.0监听所有可用网络接口
Port地址:服务运行在8888端口
internal包下:
config/config.go
编辑
存储config信息,这里rest.RestConf是RESTful API的结构体,此外还可以添加数据库,缓存配置信息
handler/demohandler.go
编辑
输入SvcContext(后面自己定义),返回HandlerFunc函数
三个过程:
解析request的类型,解析错误,返回error(下图为httpx.ErrorCtx源码)
编辑
l := logic.NewDemoLogic(r.Context(), svcCtx)的相关代码是我们后面自己定义,
l.Demo实际上充当了业务逻辑的处理过程
失败,返回报错,成功,则带上OK(200状态码)返回
handler/routes.go
编辑
这个文件夹的代码由goctl自动生成,注册路由,方法是get,路径是/from/:name(:name代表路径有一个名为name的参数,在后面定义了这个name类型的参数)
[]rest.Route代表了该类型的切片,包含了定义路由的那个结构体
logic/demologic.go
编辑在demhandler中用到的代码
DemoLogic结构体:logger(用于记录日志),ctx(请求的上下文信息),svcCtx(服务相关的信息,数据库连接,缓存实例)
NewDemoLogic就是用于New一个DemoLogic实例
Demo方法就是处理request,构造response的方法,具体的业务逻辑代码
type是后面定义的
svc/servicecontext.go
用途是通过创建svcCtx来访问config字段,套娃,增强代码的解藕性
types/types.go
goctl自动生成,request和response结构体长得样子
name类型被定义,可选为you或者me
demo.api
生成routes.go和types.go的文件依据,注册api处理的handler
采用proto3语法(一种数据交换格式)
demo.go
主文件,有如下步骤
- 解析命令行参数
- 加载配置文件到结构体c中
- 新建一个rest服务器实例
- 创建服务上下文。注册handler处理函数
- 启动rest服务器
启动服务
测试
与预期结果相符合