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

但願這篇文章可以給你帶來一些幫助和啓發,一顆小星星是你對咱們最大的確定和鼓勵🤝

好將來技術

相關文章
相關標籤/搜索