最近我們團隊開源的后端微服務框架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
希望這篇文章能夠給你帶來一些幫助和啟發,一顆小星星是你對我們最大的肯定和鼓勵??
好未來技術
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/180707.html
標籤:其他
