教你如何帮助前端同学快速生成API接口代码

时间:2024-10-27 13:17:21

最近我们团队开源的后端微服务框架go-zero增长势头比较迅猛,这篇文章我讲讲go-zero对前端团队的作用,并通过一个示例来给大家演示我们是怎么做的,希望能给后端的同学也可以帮助前端同学提高开发效率????

首先,我们来看看正常怎么实现api接口: 1,后端给出(或经过协商给出)api定义文档 2,前端多端开发编写各自的api请求代码 3,单元测试,如果有的话 4,前后端都完成后,联调接口

然后,给大家讲讲我们团队是怎么做的: 1,后端(或经过协商)通过.api文件定义出接口 2,前端多端开发通过命令一键生成各自的接口实现 由于接口代码是统一生成的,所以无需单独做接口联调

下面我通过一个例子来给大家展示完整的过程:

从这里下载goctl可执行文件,并确保命令行可运行goctl命令:

/tal-tech/goctl-plugins/releases

下载官方示例的api文件

地址:/tal-tech/go-zero/master/example/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)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

生成代码

goctl api ts -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 <AddResp>("/add", params)
    }
    
    /**
     * @description 
     * @param params
     */
    export function check(params: CheckReqParams) {
      return <CheckResp>("/check", params)
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    这个工具不仅仅支持生成ts客户端代码,根据需要可以生成java,dart客户端代码。

    使用goctl有如下好处:

    1. 减少重复劳动。
    2. 降低一些由于前后端沟通问题导致的低级错误。
    3. 服务器更新了api,客户端重新生成代码后,编译阶段就能发现问题。

    go-zero的github地址:/tal-tech/go-zero

    希望这篇文章能够给你带来一些帮助和启发,一颗小星星是你对我们最大的肯定和鼓励????

    好未来技术