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

最近咱们团队开源的后端微服务框架go-zero增加势头比较迅猛,这篇文章我讲讲go-zero对前端团队的做用,并经过一个示例来给你们演示咱们是怎么作的,但愿能给后端的同窗也能够帮助前端同窗提升开发效率👏前端

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

而后,给你们讲讲咱们团队是怎么作的:
1,后端(或通过协商)经过.api文件定义出接口
2,前端多端开发经过命令一键生成各自的接口实现
因为接口代码是统一辈子成的,因此无需单独作接口联调ios

下面我经过一个例子来给你们展现完整的过程:git

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

https://github.com/tal-tech/goctl-plugins/releasesgithub

下载官方示例的api文件

地址:https://raw.githubusercontent.com/tal-tech/go-zero/master/example/bookstore/api/bookstore.apiweb

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

执行上述代码后会生成以下文件:typescript

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客户端代码。shell

使用goctl有以下好处:json

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

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

但愿这篇文章可以给你带来一些帮助和启发,一颗小星星是你对咱们最大的确定和鼓励🤝

好将来技术

相关文章
相关标签/搜索