最近我们团队开源的后端微服务框架go-zero增长势头比较迅猛,这篇文章我讲讲go-zero对前端团队的作用,并通过一个示例来给大家演示我们是怎么做的,希望能给后端的同学也可以帮助前端同学提高开发效率????
首先,我们来看看正常怎么实现api接口: 1,后端给出(或经过协商给出)api定义文档 2,前端多端开发编写各自的api请求代码 3,单元测试,如果有的话 4,前后端都完成后,联调接口
然后,给大家讲讲我们团队是怎么做的: 1,后端(或经过协商)通过.api文件定义出接口 2,前端多端开发通过命令一键生成各自的接口实现 由于接口代码是统一生成的,所以无需单独做接口联调
下面我通过一个例子来给大家展示完整的过程:
从这里下载goctl可执行文件,并确保命令行可运行goctl命令:
下载官方示例的api文件
地址:raw.githubusercontent.com/tal-tech/go…
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地址:github.com/tal-tech/go…
希望这篇文章能够给你带来一些帮助和启发,一颗小星星是你对我们最大的肯定和鼓励????
好未来技术