gozero之api语法|青训营

308 阅读2分钟

api的概述

api 是 go-zero 自研的领域特性语言(下文称 api 语言 或 api 描述语言),旨在实现人性化的基础描述语言,作为生成 HTTP 服务最基本的描述语言。

使用之前我们需要提前安装配置好Goctl。goctl 是 go-zero 的内置脚手架。

api 领域特性语言包含语法版本,info 块,结构体声明,服务描述等几大块语法组成。类似于Goland的结构体写法,只是移除了struct关键字。

syntax

syntax 语句用于标记 api 语言的版本,不同的版本可能语法结构有所不同,随着版本的提升会做不断的优化,当前版本为 v1

    syntax = "v1"

info()

info 语句是 api 语言的 meta 信息,仅仅对当前的api文档进行说明描述,不进行代码生成。

// 包含 key-value 的 info 块  
 info (  
     foo: "bar"  
     bar:  ""
 )

type()

type可以用于定义请求体和响应体,type 可以定义多个。

type(
    // 定义获取用户信息的JSON请求体
    loginReq{
        username string `json:"username"`
        password string `json:"password"`
    }
    // 定义获取用户信息的JSON响应体
    loginResp{
        Id int `json:"id"`
        Name string `json:"name"`
        Token string `json:"token"`
    }
)

@server()

@server()用于定义HTTP服务,主要的功能有,路由分组、路由前缀、中间件声明、超时配置、jwt鉴权开关。

    @server(
        // 设置服务分组,代码生成在login目录下
        group: login
        
        // 定义路由前缀为'v1'
        prefix: /v1
        
        // 定义一个鉴权控制的中间件
        // 多个中间件以英文逗号,分割,
        // 如 Middleware1,Middleware2
        
        // 中间件按声明顺序执行  
        middleware: AuthInterceptor
        
        // jwt 鉴权开关
        jwt: Auth
        
        // 定义一个超时时长为 3 秒的超时配置
        timeout: 3s
    )

service 定义一个自己的服务


// 定义 user 服务  
    service user {  
        // 定义 handfunc转换的go文件名称及方法
        @handle login
        // 定义接口
        // 定义一个POST请求 
        // 请求地址是/user/login
        // 请求体式Request, 响应体式Response
        post /user/login(Request) returns (Response)
    }

一个简单多的api文件只需要包含

    syntax ="v1"
    service(
            get /ping
     )

即可。 在shorturl.api目录下执行以下终端命令,即可生成代码

goctl api go -api shorturl.api -dir ./

最终生成的代码结构如下: image.png 个人观点:go-zero是一个很好的微服务框架,可以轻松支撑起千万级别的服务请求,并具有高并发、高可用、易扩展等的特性。我们可以使用简单的api语法搭建一个可运行go-zero项目。