zeromicro/goctl-swagger

swagger插件使用嵌套api失败,但是goctl api 正常能生成接口

Danny5487401 opened this issue · 18 comments

(⎈ |prod-ctx:ticket-system)➜  api git:(hotfix/dingdijng) ✗ goctl api plugin -plugin goctl-swagger="swagger -filename rome.json" -api rome.api -dir .
goctl-swagger: /Users/python/Desktop/gllue_pkg/rome-be/api/"v1/mine.api" line 1:0 the nested api does not support import

代码:
image

好像是goinstall 没有拉取最新的代码,用以下方式试试?

git clone https://github.com/zeromicro/goctl-swagger
cd goctl-swagger 
go install
(⎈ |prod-ctx:ticket-system)➜  api git:(master) goctl api plugin -plugin goctl-swagger="swagger -filename rome.json" -api rome.api -dir .
goctl-swagger: /Users/python/Desktop/gllue_pkg/rome-be/api/"v1/v1.api" line 1:0 the nested api does not support import
(⎈ |prod-ctx:ticket-system)➜  api git:(master) goctl-swagger  --version                                                                 
goctl-swagger version 20220621 darwin/arm64

@MaxToby 刚升级了,还是不行

import的api文件里面还有import其他的api,是这样吗?

import的api文件里面还有import其他的api,是这样吗?

是的,上面有图

我也遇到这个问题了,主要原因是各个小模块的.api文件,有公共的结构体,于是想抽出来单独放一个公共的(分开放可以,但是不能重名,要不然gen code的时候会报错结构体多次定义)。希望能支持一下2层嵌套

import的api文件里面还有import其他的api,是这样吗?

是的,上面有图

我测试了,只要你把嵌套的嵌套的api,全放入第一层api文件,即在第一层import那些,就可以正常生成了(第二层文件的import全去掉,有红线提示忽略就好)

lxkaka commented

同样的问题,希望尽快修复

import的api文件里面还有import其他的api,是这样吗?

是的,上面有图

我测试了,只要你把嵌套的嵌套的api,全放入第一层api文件,即在第一层import那些,就可以正常生成了(第二层文件的import全去掉,有红线提示忽略就好)

就是不想修改原有结构,因为现有目录结构带v1,v2,比较清晰 @Arrowarcher

import的api文件里面还有import其他的api,是这样吗?

是的,上面有图

我测试了,只要你把嵌套的嵌套的api,全放入第一层api文件,即在第一层import那些,就可以正常生成了(第二层文件的import全去掉,有红线提示忽略就好)

就是不想修改原有结构,因为现有目录结构带v1,v2,比较清晰 @Arrowarcher

1层嵌套是支持的,平级引用公共模块在goctl api plugin这里就报错了。

The same problem, more than two levels of nesting will cause this. Hope this problem fixed soon.

@kevwan 哪时候可以解决下

希望能尽快解决

import的api文件里面还有import其他的api,是这样吗?

是的,上面有图

我测试了,只要你把嵌套的嵌套的api,全放入第一层api文件,即在第一层import那些,就可以正常生成了(第二层文件的import全去掉,有红线提示忽略就好)

我把userInfo摘到第一层api后,虽然可以生成swagger。但是在有红线的提示下,goctl format该文件进行格式排版的时候,会找不到这个结构体而报错。
Error: xxx.api line 14:13 can not find declaration 'UserInfo' in context

写给遇到相同问题的朋友,可以通过升级 goctl 解决该问题:

git clone https://github.com/zeromicro/goctl-swagger
cd goctl-swagger 
go get github.com/zeromicro/go-zero/tools/goctl@v1.5.6
go install

但是有个问题啊,api 文件里不能含有 json/form/path/header 之外的 tag,否则生成的 swagger 文件会有问题。

写给遇到相同问题的朋友,可以通过升级 goctl 解决该问题:

git clone https://github.com/zeromicro/goctl-swagger
cd goctl-swagger 
go get github.com/zeromicro/go-zero/tools/goctl@v1.5.6
go install

但是有个问题啊,api 文件里不能含有 json/form/path/header 之外的 tag,否则生成的 swagger 文件会有问题。

已经完全修复了这个问题 #88 ,在维护者合并之前,可以通过以下方式使用:

git clone https://github.com/jayvynl/goctl-swagger.git
cd goctl-swagger
go install

由于 PR 没有被合并, 新开了仓库解决 ISSUES 提到的大部分问题, 并支持 openapi 3 生成, https://github.com/jayvynl/goctl-openapi

由于 PR 没有被合并, 新开了仓库解决 ISSUES 提到的大部分问题, 并支持 openapi 3 生成, https://github.com/jayvynl/goctl-openapi

@jayvynl 为啥没合并 why unmerged?

由于 PR 没有被合并, 新开了仓库解决 ISSUES 提到的大部分问题, 并支持 openapi 3 生成, https://github.com/jayvynl/goctl-openapi

@jayvynl 为啥没合并 why unmerged?

不确定,可能是什么地方不符合维护者的想法,但是也没有 review 。