使用本插件
- 图标点击生成. 安装后在资源管理器顶部会发现
</>
图标, 点击即可生成代码, 同时在视图的标题菜单也会出现 </>
图标, 点击即可。
niuhe idl 生成
命令生成, 1 在 command+shift+p
中输入 niuhe
使用 niuhe idl 生成
命令生成;2. 在资源管理起中在任意文件右键, 使用第一个niuhe idl 生成
niuhe 语法
niuhe 文件语法上遵从 python
语法. 可引用 include
引入文件
注意
生成 golang 代码时, 命令行支持 gofmt
会更好
入口
默认读取当前工作区下的 niuhe
文件夹 内的 all.niuhe
文件. 可通过修改设置来更改此入文件的位置。
定义 app
name(admin
), 默认为 admin
#app=admin
同时可定义 gomod
变量(可选) gomod
为 go.mod
中的 module
, 默认值为 app
。定义语法为
#gomod=admin
定义整数常量
class AuthTypeEnum(ConstGroup)
ALL = Item(0, '所有人可见')
SOME = Item(1, '部分人可见')
生成的代码
var AuthTypeEnum struct {
*niuhe.IntConstGroup
ALL niuhe.IntConstItem `name:"所有人可见" value:"0"`
SOME niuhe.IntConstItem `name:"部分人可见" value:"1"`
}
其中 ConstGroup
为常量类型, AuthTypeEnum
为本组枚举的名字. class
为一个结构开始标记
定义请求结构
class UserItem(Message):
'''用户信息, class 注释例子, 注释可选'''
nickname = required.StringField()
avatar = optional.StringField(desc='头像')
生成的代码
type UserItem struct {
Nickname string `json:"nickname" zpf_name:"nickname" zpf_reqd:"true"` //
Avatar string `json:"avatar" zpf_name:"avatar"` // 头像
}
Message
表示定义的是一个结构。
结构变量修饰符为重复类型
.类型
, 以及可选的说明注释组成
###重复类型
required
, optional
, repeated
, mapping
- required 表示这个此结构作为请求参数时本参数必填
- optional 表示此结构作为请求结构时本参数可选
- repeated 表示生成的成员为数组
- mapping 表示生成的成员为 map 形式, 内部可填充任意值
成员类型
IntegerField
, DecimalField
, FloatField
, LongField
, StringField
, BooleanField
, MessageField
, EnumField
,StringEnumField
, FileField
, AnyField
- IntegerField 生成
int
- DecimalField 生成
float64
- FloatField 生成
float64
- LongField 生成
int64
- StringField 生成
string
- BooleanField 生成
bool
请求时对应0
和1
- MessageField 对应定义的
Message
结构. 通过 cls
指定,如: users = repeated.MessageField(desc='用户列表', cls=UserItem)
- EnumField 对应定义的
ConstGroup
结构. 通过 group
指定,如: auth = repeated.EnumField(desc='认证类型', group=AuthTypeEnum)
- FileField 读取
header
中对应的文件
- AnyField
map[string]interface{}
定义一个无成员的空结构时使用pass
如:
class NoneReq(Message):
pass
定义方法
with services():
POST("获取用户信息", '/api/user/info/', NoneReq, wraps(UserItem))
...
with services():
为定义请求路由的开始结构为: 方法·
(注释
,路由
,请求参数结构
,wraps(返回数据结构
)) 组成。
方法
请求方法当定义了 POST
, GET
, PUT
, PATCH
, DELETE
, HEAD
和 OPTIONS
七种
路由
路由由/model
/view
/方法
/ 三段组成, model
相同的会生成在同一个文件夹下, model
和 view
相同的会生成在同一文件内, 同一个 view
下的方法会生成在同一文件内.
方法的定义分部分的和全部的两种
POST("获取用户信息", '/api/user/info/')
POST("获取用户信息", '/api/user/info/', NoneReq, wraps(UserItem)) #已废弃
POST("获取用户信息", '/api/user/info/', NoneReq, UserItem) # 新语法, 不再需要 wraps() 包装
数据库格式
conf/appName.yaml 中 db 配置格式
db:
main:user:pwd@tcp(host:port)/database_name?charset=utf8mb4
生成 go route 信息
从 0.2.10
版本开始 支持生成 go route 信息, 默认是关闭的, 打开开关为在 .config
中的 #langs=
中添加 route
#langs=go,route
.config 配置
在 niuhe
文件夹下添加 .config
文件, 可对生成的代码进行定制. 支持的定制项如下:
#app=admin
#gomod=admin
#langs=go,ts,docs,route
#tsapi=full_api_path1, full_api_path2
#tstypes=full_types_path1,full_types_path2
#showlog
app
为生成的代码中的 app
名称, 必须定义
gomod
为生成的代码中的 gomod
名称, 默认为 app
定义的名称
langs
为生成的语言类型, 默认为 go,ts,docs,route
分别为 go
, typescript
, swagger.json
文档, route
为生成的 go route 信息
tsapi
langs
中支持 ts
时有效, 为生成的 ts
接口文件路径, 默认为 typings
文件夹下的 api.ts
文件, 可定义多个, 如: #tsapi=full_api_path1, full_api_path2
tstypes
langs
中支持 ts
时有效, 为生成的 ts
类型文件路径, 默认为 typings
文件夹下的 types.d.ts
文件, 可定义多个, 如: #tstypes=full_types_path1,full_types_path2
showlog
为生成代码时是否生成日志, 默认为不打印日志, 打开时,日志在项目目录下 niuhe.log
中
生成 swagger json 文档
从 0.2.1
版本开始 支持生成 swagger json 文档, 默认是关闭的, 打开开关为在 .config
中的 #langs=
中添加 docs
#langs=ts,go,docs
如需对生成的 swagger.json
文件格式进行修改, 请在在 niuhe
文件夹下添加 docs.json5
文件, 所有支持的定制项如下:
{
info: {
title: "牛河",
description: "牛河接口文档",
license: { // 默认不生成 license 字段
name: "MIT",
url: "github", // 证书地址
},
contact: { // 联系方式
email: "xxx.qq.com",
},
version: "3.0.0",
},
schemes: ["http", "https"],
consumes: ["application/x-www-form-urlencoded"], // 定义请求的 Content-Type方式, 默认为: application/x-www-form-urlencoded
produces: ["application/json"], // 定义返回的 Content-Type, 默认为: application/json
host: "", // 默认为空
basePath: "", // 默认为空
title: "牛河",
security: { // 支持的 验证方式
bearer: { // 这里为 bearer 的例子
type: "apiKey",
name: "Authorization",
in: "header", // bearer 放在 header 中, 可选值为 'query' | 'header' | 'path' | 'formData' | 'body'
},
},
tags: { // tags 为 API 分组标签, 为 /model/view/method/ 三段结构中的 view 名称, 相当于给 API 分组
system: '系统API',
},
format: false, // 是否格式化 json 输出, 默认为 true
rsp: {
result: 'result', // 自定义 protcol 时修改 {result, data} 中的 result
data: 'data', // 自定义 protcol 时修改 {result, data} 中的 data
message: 'message'
}
}