接口定義
- 定義 API 接口文件
接口文件 add.api 的內容如下:
syntax = "v1"info (title: "API 接口文件示例"desc: "演示如何編寫 API 接口文件"author: "一見"date: "2023年12月07日"version: "v1"
)type AddReq {A int `path:"a"`B int `path:"b"`
}type AddReply {Sum int `json:"sum"`
}service Adder {@handler addget /add/:a/:b(AddReq) returns(AddReply)
}上述go-zero的api文件定義語法正確嗎?
- 編譯 API 接口文件
在 add.api 文件所在目錄下,使用 go-zero 的腳手架工具 goctl 編譯 add.api 文件:
# goctl api go -api add.api -dir .
Done.
編譯成功后的目錄結構:
.
├── add.api
├── adder.go # 服務端 main 函數所在文件
├── etc
│ └── adder.yaml # 配置文件
└── internal├── config│ └── config.go # 和配置對應的數據結構├── handler # HTTP 部分代碼│ ├── addhandler.go│ └── routes.go├── logic│ └── addlogic.go # 需要實現的業務邏輯代碼├── svc│ └── servicecontext.go # 上下文└── types└── types.go # 對應 API 中定義的數據結構
在進一步之前,還需執行“go mod tidy”整理依賴。
目錄 etc 下的配置文件 adder.yaml 定義的 API 網關服務的服務端口等:
# cat etc/adder.yaml
Name: Adder
Host: 0.0.0.0
Port: 8888
如上所示,go-zero 腳手架 goctl 設置的監聽端口為 8888 。
- 編譯生成可執行程序文件
go mod tidy
go build -o add_http_server adder.go
- 啟動服務:
# ./add_http_server
Starting server at 0.0.0.0:8888...
- 測試服務是否可用:
# curl -i "http://localhost:8888/add"
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Traceparent: 00-97de89193a15ff3704beeab6ab01cbc5-448ad910b934da13-00
Date: Thu, 07 Dec 2023 07:09:36 GMT
Content-Length: 4null
接口實現
go-zero 的腳手架 goctl 生成的是一個空服務,除了返回 null,啥也沒干。在函數 Add 中增加實現:
# cat internal/logic/addlogic.go
package logicimport ("context""api/internal/svc""api/internal/types""github.com/zeromicro/go-zero/core/logx"
)type AddLogic struct {logx.Loggerctx context.ContextsvcCtx *svc.ServiceContext
}func NewAddLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AddLogic {return &AddLogic{Logger: logx.WithContext(ctx),ctx: ctx,svcCtx: svcCtx,}
}func (l *AddLogic) Add(req *types.AddReq) (resp *types.AddReply, err error) {// todo: add your logic here and delete this lines := req.A + req.B // 新增代碼return &types.AddReply{ s }, nil // 新增代碼return
}
重新編譯執行:
# curl -i "http://localhost:8888/add?a=1&b=3"
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Traceparent: 00-33930e740d4d642dd8a16667af5f6a60-cb450c0bdbb9f6fc-00
Date: Fri, 08 Dec 2023 02:58:48 GMT
Content-Length: 9{"sum":4}