go swagger怎么玩(使用swagger为go项目生成python的SDK)

news2024/11/16 21:49:04

异常详细!所到之处,问题全量解决、你值得拥有!

目录

go方面需要做的准备(步骤+代码)

生成对应语言的SDK

生成后怎么调用验证


提示:生成哪种语言的SDK只是本文的其中一步,具体哪种语言可以选择,没有任何影响。

go方面需要做的准备(步骤+代码)

1,下载go-swagger包(已为你准备好:go-swagger.zip-其它代码类资源-CSDN下载),把文件放到你的$GOPATH\src\github.com目录下

2,进入

$GOPATH\src\github.com\go-swagger\go-swagger\cmd

下执行

go install ./swagger

这时候你的$GOPATH\bin目录下会生成一个swagger。exe文件,比如作者的:

环境搞好了,接下来进入到项目中,给对应模块加swagger需要的注释:

1,main.go中增加如下内容

// +build go1.13
//go:generate swagger generate spec -o swagger.json

// Package main wl-COMS API.
// 		Version: 0.0.1
//		Schemes: http, https
//		Host: localhost:8000
//		BasePath: /api
//
//		Consumes:
//		- application/json
//		- application/x-www-form-urlencoded
//		- multipart/form-data
//
//		Produces:
//		- application/json
//
//      Security:
//      - api_key:
//
//      SecurityDefinitions:
//      api_key:
//          type: apiKey
//          name: Authorization
//          in: header
// swagger:meta
package main

接着给需要生成的路由模块加下swagger可以识别的注释,比如我以customer模块操作,如下:

要特别注意的是书写格式及其对应,注意URL的/拼接的参数在注释为{ID}。

其中接口传参和响应设定写在swagger.go文件中(该文件在路由模块目录下自行创建)我这只操作了customer模块所以只在customer的路由下增加了:

内容如下:

package customer

import "gin-coms/model"

// region parameter		以下是请求SDK时请求参数的构造

// ListCustomerParameter
// swagger:parameters ListCustomer
type ListCustomerParameter struct {

	// required: true
	// in: header
	Auth string `json:"auth"`	// 不考虑其实际意义,旨在实践以header的方式取参数
}

// OperateCustomerParameter
// swagger:parameters CreateCustomer UpdateCustomer
type OperateCustomerParameter struct {
	// required: true
	// in: body
	Customer model.Customer `json:"customer"`	// 请求体中的参数

	// required: true
	// in: header
	Auth string `json:"auth"`	// 不考虑其实际意义,旨在实践以header的方式取参数
}


// DetailCustomerParameter
// swagger:parameters DetailCustomer
type DetailCustomerParameter struct {
	// required: true
	// in: path
	ID string

	// required: true
	// in: header
	Auth string `json:"auth"`	// 不考虑其实际意义,旨在实践以header的方式取参数
}

// endregion

// region response  以下是SDK返回的响应的构造,其中EmptyCustomerResponse这个可以用在DELETE 的接口上

// EmptyCustomerResponse
// swagger:response EmptyCustomerResponse
type EmptySecretResponse struct {
	// in: body
	Body struct {
	}
}

// ListCustomerResponse
// swagger:response ListCustomerResponse
type ListCustomerResponse struct {
	// in: body
	Body struct {
		Data []model.Customer `json:"data"`
	}
}

// OpCustomerResponse
// swagger:response OpCustomerResponse
type OpCustomerResponse struct {
	// in: body
	Body struct {
		Data model.Customer `json:"data"`
	}
}

// endregion

拿ListCustomer这个接口为例解释一下这个怎么写:定义ListCustomerParameter结构体,给接口处理器ListCustomer后拼接Parameter作为结构体名称;参数为这个接口需要的参数,如果是对象就写对象,在header中的话就写header;必须传的参数需要加// required: true;响应中的定义一样,结构体命名就是给接口处理器ListCustomer后拼接Response;

比如CreateCustomer 这个接口,他的传参在请求体中所以写了in body。

执行main文件的命令按钮:

点击后别急,等控制台的红灯自动灭掉,这时候看看项目根目录,生成了一个swagger.json文件~,如图:

已经离成功越来越近了~

生成对应语言的SDK

将swagger.json的内容复制到Swagger Editor的左侧栏中,如图:

滑动鼠标滚轮等左侧内容可以上下自如的滑动后,再点击生成client那个按钮,选python语言(你如果需要生成其他语言的SDK直接点选对应的即可),浏览器会生成一个名为python-client-generated.zip的文件

解压后目录如下:

生成后怎么调用验证

此处我以简便的方式来调用一下看看:

先启动你的go项目,比如我写的这个是一个基于gin的项目,启动起来,然后将swagger_client这个目录复制到你的python项目,写如下几行代码:

# -*- coding: UTF-8 -*-

from swagger_client.api.customer_api import CustomerApi
from swagger_client.api_client import ApiClient
from swagger_client.configuration import Configuration

c = Configuration()
api_client = ApiClient(c)
ins = CustomerApi(api_client)
res = ins.list_customer(auth="我是岚总")

print res

run一下这个py文件看看结果:

来go这边看看控制台:

可以再试试创建接口:

大功告成!!!

你如果对生成你需要的语言的SDK不清楚怎么调用它,可以看看docs目录。在生成的sdk里面有个目录叫docs,比如我这以customer为例,看看CustomerApi.md这个文件的这一部分:

这块所写的就是调用示例,照着示例来写就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1409706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字图像处理(实践篇)二十七 Python-OpenCV 滑动条的使用

目录 1 涉及的函数 2 实践 1 涉及的函数 ⒈ setWindowProperty()用于设置GUI应用程序的属性 cv2.setWindowProperty(windowsName, prop_id, prop_value) 参数: ①

Oracle篇—分区表的管理(第二篇,总共五篇)

☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣…

Wordpress seo优化该怎么做?

Wordpress作为开源管理系统,目前已然是世界上最流行的cms之一,这不仅仅因为他开源,对用户友好,让任何人都能轻而易举的制作网站,更是因为这套程序对于搜索引擎非常友好,是做谷歌seo的不二之选 Wordpress作为…

消息队列RabbitMQ.03.死信交换机的讲解与使用

目录 一、死信队列(延迟队列) 概念讲解 二、确认消息(局部方法处理消息) 三、代码实战 1.编写生产者代码,配置消息、直连交换机、路由键 1.1代码解析: 2.配置消费者接受类接受直连交换机的路由键 2.1. String msg&#xff…

nsenter比docker exec更底层的命令

文章目录 nsenter介绍安装方法简单使用 nsenter介绍 nsenter命令是一个可以在指定进程的命令空间下运行指定程序的命令。它位于util-linux包中。典型的用途就是进入容器的网络命令空间。相当多的容器为了轻量级,是不包含较为基础的命令的,比如说ip addr…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-7 datalist

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>datalist</title> </head><body> <input id"address" list"addressList"> <datalist id"addressList"…

【数据结构】 链队列的基本操作 (C语言版)

目录 一、链队列 1、链栈的定义&#xff1a; 2、链栈的优缺点&#xff1a; 二、链队列的基本操作算法&#xff08;C语言&#xff09; 1、宏定义 2、创建结构体 3、链栈的初始化 4、链队列的入队 5、链队列的出队 6、取链队列的对头元素 7、链队列的销毁 8、链…

4.列表选择弹窗(CenterListPopup)

愿你出走半生,归来仍是少年&#xff01; 环境&#xff1a;.NET 7、MAUI 在屏幕中间弹窗的列表选择弹窗。 1.布局 <?xml version"1.0" encoding"utf-8" ?> <toolkit:Popup xmlns"http://schemas.microsoft.com/dotnet/2021/maui"x…

【AIGC】Diffusers:扩散模型的开发手册说明2

前言 扩散器被设计成一个用户友好且灵活的工具箱&#xff0c;用于构建适合您用例的扩散系统。工具箱的核心是模型和调度程序。然而 DiffusionPipeline 为方便起见将这些组件捆绑在一起&#xff0c;但您也可以解包管道并分别使用模型和调度程序来创建新的扩散系统。 解构 Stab…

uniapp组件库Modal 模态框 的使用方法

目录 #平台差异说明 #基本使用 #传入富文本内容 #异步关闭 #点击遮罩关闭 #控制模态框宽度 #自定义样式 #缩放效果 #API #Props #Event #Method #Slots 弹出模态框&#xff0c;常用于消息提示、消息确认、在当前页面内完成特定的交互操作。 #平台差异说明 AppH5微…

gin如何实现热更新

什么是热更新&#xff1f; 一种不需要用户关闭应用或重新启动设备就能进行的软件更新技术。它可以快速地在线修复或升级应用程序的错误或功能&#xff0c;从而减少用户的等待时间并提高用户体验。 如何优雅停止服务&#xff1f; Go 1.8版本之后&#xff0c; http.Server 内置…

CentOS使用

1.使用SSH连接操作虚拟机中的CentOS 使用代理软件(MobaX/Xshell)通过ssh连接vmware中的虚拟机,可以摆脱vmware笨重的软件,直接在代理软件中进行操作. 包括使用云虚拟器,其实也只是在本地通过ssh连接别处的云服务商的硬件而已. 1.1 配置静态IP 为什么要配置静态IP? 想要使用…

构建高可用消息队列系统 01

构建高可用消息队列系统 01 引言1. RabbitMQ简介介绍1.1 什么是RabbitMQ1.2 RabbitMQ的核心特性1.3 RabbitMQ与AMQP 2.安装RabbitMQ3.消息队列实践总结 引言 在当今互联网时代&#xff0c;消息队列系统扮演着至关重要的角色&#xff0c;它们被广泛应用于分布式系统、微服务架构…

Linux编辑器vim(含vim的配置)

文章目录 前言vim的基本概念vim基本操作进入vim模式切换退出vim vim指令vim命令模式指令vim底行模式命令 简单vim配置 前言 本篇文章&#xff0c;小编将介绍Linux编辑器–>vim以及vim的配置。 vim的基本概念 正常/普通/命令模式(Normal mode) 控制屏幕光标的移动&#xf…

年夜饭都吃什么菜?年夜饭菜谱保存到手机便签更便捷

农历除夕&#xff0c;是我国一年中最为重要的传统节日之一&#xff0c;而在这一天&#xff0c;全家团圆共进年夜饭是一种重要的仪式感。然而&#xff0c;随着现代生活的繁忙&#xff0c;很多人都在为年夜饭吃什么菜而发愁。年夜饭是一顿团圆、美好的大餐&#xff0c;选择一些好…

基于非缓冲区文件操作(实现cp的功能)

打开文件 -- open open(const char *pathname, int flags); open(const char *pathname, int flags, mode_t mode); 形参&#xff1a; pathname -- 文件的路径 flags&#xff1a;下面的宏定义必须选择一个 O_RDONLY -- 只读 O_WRONLY -- 只写 O_RDWR --…

selenium执行出现异常,SessionNotCreatedException ChromeDriver only supports

问题现状&#xff1a; 运行程序报错&#xff1a; selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 114 Current browser version is 121.0.6167.85 with binary path /App…

8.6跳跃游戏②(LC45-M)

算法&#xff1a; 与上一题一样&#xff0c;还是看最大覆盖范围 要从覆盖范围出发&#xff0c;不管怎么跳&#xff0c;覆盖范围内一定是可以跳到的&#xff0c;以最小的步数增加覆盖范围&#xff0c;覆盖范围一旦覆盖了终点&#xff0c;得到的就是最少步数&#xff01; 这里…

MyBatis 批量插入数据优化

前言 最近在项目上遇到了批量插入的场景问题&#xff0c;由于每次需要插入超过 10w 的数据量并且字段也蛮多的导致如果使用循环单次插入的方式插入数据插入的效率不高。相信读者们在实际开发中也遇到过这样类似的场景&#xff0c;那么批量插入如何实现呢&#xff1f; 其实我也…

本地部署Tomcat开源服务器并结合内网穿透远程访问

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器&#xff0c;不仅名字很有趣&#xff0…