乐趣区

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

最近咱们团队开源的后端微服务框架 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…

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 有如下益处:

  1. 缩小重复劳动。
  2. 升高一些因为前后端沟通问题导致的低级谬误。
  3. 服务器更新了 api,客户端从新生成代码后,编译阶段就能发现问题。

go-zero 的 github 地址:https://github.com/tal-tech/g…

心愿这篇文章可能给你带来一些帮忙和启发,一颗小星星是你对咱们最大的必定和激励????

好将来技术

退出移动版