如何将swagger ui与golang和goa集成
我一直在用go和goa构建我的第一个RESTful服务,所以基本上我开始这样做,最后goa生成了两个招摇过市的文件,如何将swagger ui与golang和goa集成,go,swagger-ui,Go,Swagger Ui,我一直在用go和goa构建我的第一个RESTful服务,所以基本上我开始这样做,最后goa生成了两个招摇过市的文件,swagger.yaml和swagger.json。问题是,我一直在寻找一种方法,将招摇过市的ui添加到索引中。但我还没有找到这样的例子 我也查看了和部分,但他们给我的唯一建议是使用生成器,但我不知道是否有一种方法可以在不需要访问公共主机的情况下执行此操作?TL;博士 展示了如何构建一个服务于静态资产的API,该API可以进行调整以包括Swager UI 为了遵循以下示例: 获取依
swagger.yaml
和swagger.json
。问题是,我一直在寻找一种方法,将招摇过市的ui添加到索引中。但我还没有找到这样的例子
我也查看了和部分,但他们给我的唯一建议是使用生成器,但我不知道是否有一种方法可以在不需要访问公共主机的情况下执行此操作?TL;博士
展示了如何构建一个服务于静态资产的API,该API可以进行调整以包括Swager UI
为了遵循以下示例:
Resource
s添加到design.go
文件中main.go中安装控制器
example.com/your package/
)
1.获取依赖项
为了提供文件,示例使用:
从任何文件生成Go代码的小实用程序。用于在Go程序中嵌入二进制数据
使用
从net/http
提供嵌入式文件go-bindata
go get github.com/a-urth/go-bindata/...
go get github.com/elazarl/go-bindata-assetfs/...
2.将资源添加到design.go
文件:
3.在main.go中安装控制器
4.下载大摇大摆的用户界面
用于下载Swagger UI的。
将所有文件放在example.com/your package/public/swagger
文件夹中
在example.com/your package/public/swagger/index.html
文件中:
- 搜索
http://petstore.swagger.io/v2/swagger.json
- 将其替换为
/swagger.json
这样,将使用生成的swagger.json
代替Petstore示例
5.运行发电机
这将创建控制器、招摇过市、模式和静态内容
多恩
您现在应该有一个功能齐全的招摇过市用户界面。我最近运行了这个,还想知道如何启动招摇过市用户界面。一旦生成了openapi3.json
文件,就可以使用这个docker compose配置来打开Swigger ui。您可以根据文件所在的位置替换装入的卷和SWAGGER_JSON变量。大摇大摆的用户界面应该运行正常http://localhost:8080.
注意:您可能需要在goa中启用CORS来执行请求
swagger:
image: swaggerapi/swagger-ui
ports:
- '8080:8080'
environment:
SWAGGER_JSON: '/openapi3.json'
volumes:
- ./gen/http/openapi3.json:/openapi3.json
import (
"net/http"
"example.com/your-package/app"
"example.com/your-package/public/swagger"
"github.com/elazarl/go-bindata-assetfs"
"github.com/goadesign/goa"
"github.com/goadesign/goa/middleware"
)
func main() {
// ...
// Mount "schema" controller
c1 := NewSchemaController(service)
app.MountSchemaController(service, c1)
// Mount "swagger" controller
c2 := NewSwaggerController(service)
// You can override FileSystem of the controller.
// For example using github.com/elazarl/go-bindata-assetfs is like below.
c2.FileSystem = func(dir string) http.FileSystem {
return &assetfs.AssetFS{
Asset: swagger.Asset,
AssetDir: swagger.AssetDir,
AssetInfo: swagger.AssetInfo,
Prefix: dir,
}
}
app.MountSwaggerController(service, c2)
// ...
}
go generate goagen -d example.com/your-package/design app
go generate goagen -d example.com/your-package/design main
go generate goagen -d example.com/your-package/design swagger -o public
go generate goagen -d example.com/your-package/design schema -o public
go generate go-bindata -ignore 'bindata.go' -pkg swagger -o public/swagger/bindata.go ./public/swagger/...
swagger:
image: swaggerapi/swagger-ui
ports:
- '8080:8080'
environment:
SWAGGER_JSON: '/openapi3.json'
volumes:
- ./gen/http/openapi3.json:/openapi3.json