最近我們團隊開源的后端微服務框架go-zero增長勢頭比較迅猛,這篇文章我講講go-zero對前端團隊的作用,並通過一個示例來給大家演示我們是怎么做的,希望能給后端的同學也可以幫助前端同學提高開發效率👏
首先,我們來看看正常怎么實現api接口:
1,后端給出(或經過協商給出)api定義文檔
2,前端多端開發編寫各自的api請求代碼
3,單元測試,如果有的話
4,前后端都完成后,聯調接口
然后,給大家講講我們團隊是怎么做的:
1,后端(或經過協商)通過.api文件定義出接口
2,前端多端開發通過命令一鍵生成各自的接口實現
由於接口代碼是統一生成的,所以無需單獨做接口聯調
下面我通過一個例子來給大家展示完整的過程:
從這里下載goctl可執行文件,並確保命令行可運行goctl命令:
https://github.com/tal-tech/goctl-plugins/releases
下載官方示例的api文件
地址:https://raw.githubusercontent.com/tal-tech/go-zero/master/example/bookstore/api/bookstore.api
type (
addReq struct {
book string `form:"book"`
price int64 `form:"price"`
}
addResp struct {
ok bool `json:"ok"`
}
)
type (
checkReq struct {
book string `form:"book"`
}
checkResp struct {
found bool `json:"found"`
price int64 `json:"price"`
}
)
service bookstore-api {
@server(
handler: AddHandler
)
get /add (addReq) returns (addResp)
@server(
handler: CheckHandler
)
get /check (checkReq) returns (checkResp)
}
生成代碼
goctl api ts -api bookstore.api -dir ./bookstore -webapi axios
執行上述代碼后會生成如下文件:
import webapi from "axios"
export interface AddReq {
}
export interface AddReqParams {
book: string
price: number
}
export interface AddResp {
ok: boolean
}
export interface CheckReq {
}
export interface CheckReqParams {
book: string
}
export interface CheckResp {
found: boolean
price: number
}
/**
* @description
* @param params
*/
export function add(params: AddReqParams) {
return webapi.get<AddResp>("/add", params)
}
/**
* @description
* @param params
*/
export function check(params: CheckReqParams) {
return webapi.get<CheckResp>("/check", params)
}
這個工具不僅僅支持生成ts客戶端代碼,根據需要可以生成java,dart客戶端代碼。
使用goctl有如下好處:
- 減少重復勞動。
- 降低一些由於前后端溝通問題導致的低級錯誤。
- 服務器更新了api,客戶端重新生成代碼后,編譯階段就能發現問題。
go-zero的github地址:https://github.com/tal-tech/go-zero
希望這篇文章能夠給你帶來一些幫助和啟發,一顆小星星是你對我們最大的肯定和鼓勵🤝
好未來技術