教你如何幫助前端同學快速生成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

希望這篇文章能夠給你帶來一些幫助和啟發,一顆小星星是你對我們最大的肯定和鼓勵🤝

好未來技術


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM