Golang中如何为Swagger API添加Co Client?
Golang中如何为Swagger API添加Co Client?
寻求帮助 - 如何为 Swagger API 添加 Go 客户端?
感谢您关注此问题。我正在使用 Swagger Editor 网站上提供的 Pet Store 示例,该示例展示了输入的 API 文件以及在 Swagger UI 中生成的 API:
我正尝试扩展此演示,以包含宠物图片(PNG 格式)、已输入文件的列表及其相关特征。
我能否为此 API 客户端使用另一种语言,例如 Go?
我确实尝试过从 Swagger 生成 Go 客户端,但未能找到添加上述功能的方法。
Go 官方网站提供的 REST API 教程并未讨论 Go 客户端。
我在网上(包括 YouTube 和其他论坛)查找了一些解释 API 客户端目的及其可用性的教程片段,但未找到任何提供合适解释的资料…
我尝试过其他论坛提供的一些 Go 脚本来读取图片(.png 格式)。在 Ubuntu 终端上,它打印出的是乱码文本而非图片。
是否有任何已发布的教程/指南可供遵循以实现上述目标?
感谢您的指导。
更多关于Golang中如何为Swagger API添加Co Client?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang中如何为Swagger API添加Co Client?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go中为Swagger API生成客户端并处理文件上传/下载,可以使用go-swagger工具。以下是具体步骤和示例代码:
1. 安装go-swagger工具
go install github.com/go-swagger/go-swagger/cmd/swagger@latest
2. 修改Swagger规范以支持文件上传
在您的Pet Store示例中添加文件上传端点:
paths:
/pets/{id}/uploadImage:
post:
tags:
- pet
summary: Uploads an image
operationId: uploadFile
consumes:
- multipart/form-data
produces:
- application/json
parameters:
- name: id
in: path
description: ID of pet to update
required: true
type: integer
format: int64
- name: file
in: formData
description: Image file to upload
required: true
type: file
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/ApiResponse'
3. 生成Go客户端代码
swagger generate client -f swagger.yaml -A petstore
4. 使用生成的客户端上传文件
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/go-openapi/strfmt"
"your-project/client"
"your-project/client/pet"
)
func uploadPetImage() {
// 初始化客户端
cfg := client.DefaultTransportConfig().WithHost("localhost:8080")
cli := client.NewHTTPClientWithConfig(strfmt.Default, cfg)
// 打开图片文件
file, err := os.Open("pet.png")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// 创建上传请求
params := pet.NewUploadFileParams()
params.ID = 1
params.File = file
// 执行上传
resp, err := cli.Pet.UploadFile(context.Background(), params)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Upload successful: %v\n", resp.Payload)
}
5. 处理文件下载的Swagger定义
paths:
/pets/{id}/image:
get:
tags:
- pet
summary: Get pet image
operationId: getPetImage
produces:
- image/png
parameters:
- name: id
in: path
description: ID of pet
required: true
type: integer
format: int64
responses:
'200':
description: successful operation
schema:
type: string
format: binary
6. 下载文件的Go客户端代码
func downloadPetImage() {
cfg := client.DefaultTransportConfig().WithHost("localhost:8080")
cli := client.NewHTTPClientWithConfig(strfmt.Default, cfg)
params := pet.NewGetPetImageParams()
params.ID = 1
resp, err := cli.Pet.GetPetImage(context.Background(), params)
if err != nil {
log.Fatal(err)
}
// 保存图片文件
outFile, err := os.Create("downloaded_pet.png")
if err != nil {
log.Fatal(err)
}
defer outFile.Close()
// 将响应体写入文件
_, err = outFile.Write(resp.Payload)
if err != nil {
log.Fatal(err)
}
fmt.Println("Image downloaded successfully")
}
7. 处理文件列表的示例
definitions:
FileInfo:
type: object
properties:
filename:
type: string
size:
type: integer
contentType:
type: string
characteristics:
type: array
items:
type: string
paths:
/files:
get:
tags:
- files
summary: Get list of uploaded files
operationId: getFilesList
produces:
- application/json
responses:
'200':
description: successful operation
schema:
type: array
items:
$ref: '#/definitions/FileInfo'
8. 完整的客户端初始化示例
package main
import (
"context"
"fmt"
"log"
httptransport "github.com/go-openapi/runtime/client"
"github.com/go-openapi/strfmt"
"your-project/client"
"your-project/client/pet"
)
func main() {
// 创建传输配置
transport := httptransport.New("localhost:8080", "/v2", nil)
// 创建客户端
cli := client.New(transport, strfmt.Default)
// 测试连接
listParams := pet.NewFindPetsByStatusParams()
listParams.Status = []string{"available"}
pets, err := cli.Pet.FindPetsByStatus(context.Background(), listParams)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Found %d pets\n", len(pets.Payload))
}
9. 处理二进制数据的自定义类型
如果需要处理图片显示,可以添加自定义类型处理:
// 自定义图片处理函数
func displayImageFromResponse(resp *pet.GetPetImageOK) {
// 在终端显示图片(需要合适的终端支持)
fmt.Printf("Image data received: %d bytes\n", len(resp.Payload))
// 或者保存到文件
err := os.WriteFile("display.png", resp.Payload, 0644)
if err != nil {
log.Fatal(err)
}
// 在Linux上可以使用外部命令显示
// exec.Command("xdg-open", "display.png").Start()
}
这些代码示例展示了如何使用go-swagger为支持文件上传/下载的Swagger API生成和使用Go客户端。确保在生成代码前正确配置Swagger规范中的文件相关端点。

