如何在Swagger 2.0中为HTTP和HTTPS指定不同端口?
嘿,这个问题我之前处理过!Swagger 2.0本身确实没法直接给不同协议指定不同端口——因为它的host字段只能设置一个端口值。不过有两种可行的解决思路,看你能不能升级到OpenAPI 3.0,或者在Swagger 2.0里做些适配:
方法一:升级到OpenAPI 3.0(推荐)
如果你的项目允许升级API文档版本,那OpenAPI 3.0的servers数组特性完美解决这个问题。它支持为每个协议单独配置端口,这也是最规范的做法。把你的Swagger 2.0文档转换成3.0格式后,配置两个server条目即可:
openapi: 3.0.3 info: version: 1.0.0 title: API for gateways description: API for gateways to access server (port 81 for http and 444 for https) servers: - url: http://gateway.example.com:81/1.0 description: HTTP endpoint on port 81 - url: https://gateway.example.com:444/1.0 description: HTTPS endpoint on port 444 paths: # 在这里添加你的路径定义
这样配置后,Swagger UI会显示一个服务器选择下拉框,用户可以直接切换HTTP(81端口)和HTTPS(444端口)的端点,请求会自动使用对应的端口。
方法二:在Swagger 2.0中适配(无法升级时)
如果必须保留Swagger 2.0格式,那只能通过文档说明和扩展字段来让用户清楚端口映射规则:
- 先把
host字段改成不带端口的形式,避免混淆 - 在
description里明确标注每个协议对应的端口 - 可以用自定义扩展字段(比如
x-port-mapping)结构化记录端口映射,方便后续工具识别
示例代码如下:
swagger: '2.0' info: version: 1.0.0 title: API for gateways description: | API for gateways to access server - HTTP 请使用端口 81 - HTTPS 请使用端口 444 schemes: - http - https host: gateway.example.com basePath: /1.0 x-port-mapping: http: 81 https: 444 paths: # 在这里添加你的路径定义
这种方式虽然不能让Swagger UI自动切换端口,但能清晰告知用户端口规则。如果需要UI自动切换功能,就得自己写自定义JavaScript脚本监听协议选择事件,手动修改请求端口,不过这属于额外的定制开发了。
内容的提问来源于stack exchange,提问作者user1032531
相关产品推荐
相关产品推荐

