随笔 - 191  文章 - 0  评论 - 312  阅读 - 39万

教你如何帮助前端同学快速生成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.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有如下好处:

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

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

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

好未来技术

posted on   万俊峰Kevin  阅读(1311)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

点击右上角即可分享
微信分享提示