创建user.api文件
$ goctl api -o user.api
user.api文件内容

从图中我们可以看到有 import、info、type、service 4个元素块
import块
一个包含service的api文件对应一个微服务,在实际场景中,微服务用到的struct会特别多,如果过多的struct都定义到一个api文件中,则会显得非常拥挤,增加代码阅读难度。
api文件引入,多个api文件以换行符分割,被引入api文件可以包含struct和service内容
语法格式
import $api
$api: api文件相对/绝对路径
语法示例
import "foo1.api" import "foo2.api"
info块
api文件进行描述
语法格式
info(
// key-value
)key-value
| key | 描述 | 示例 |
| title | 标题 | title:"api描述" |
| desc | 说明 | desc:"api语法描述" |
| author | 作者 | author:"keson" |
| 邮件 | email:"keson@xiaoheiban.cn" | |
| version | 版本 | version:"v1.0.0" |
语法示例
info( title: "api demo" desc: "show how define api grammar" author: "keson" email: "keson@xiaoheiban.cn" )
type块
api用到的struct,包含request、response等
语法格式
同golang语法一致
语法示例
type request struct {
ping string `json:"ping"` // 见 #tag描述
}tag描述
| key | 描述 | 支持 | 生效范围 | 示例 |
| json | json序列化tag | Golang | request、response | json:"name,optional" |
| path | 路由path值,配合路由使用 | go-zero | request | path:"id" |
| form | form标签,form 消息体和quertString的值均会被绑定 | go-zero | request | form:"name" |
service块
微服务定义,包含host、port、middleware、路由等信息,goctl会根据此block生成对应的服务
语法格式
@server(
jwt: $auth
middleware: $middleware
)
service $name {
@doc(
summary: $desc
)
@handler $handler
$httpmethod $path ($request) returns ($response)
....
}字段描述
| 字段 | 描述 | 示例 |
| $jwt | 开启jwt鉴权 | Auth |
| $middleware | 中间件声明 | loghandler |
| $desc | 路由描述 | "登录" |
| $handler | handler名称 | user |
| $httpmethod | http方法(必须小写) | post |
| $path | http路由 | /user/login |
| $request | 请求体,没有可为空 | UserRequest |
| ($response) | 响应体,没有则省略returns及其后面语法 | UserResponse |
语法示例
@server(
jwt: Auth
middleware: logHandler
)
service user {
@doc(
summary: "登录"
)
@handler user
port /user/login (UserRequest) returns (UserResponse)
}注意事项
TODO: 目前仅支持单行注释,否则会解析出错
