当我将 Swagger API 导入 Postman 时,所有请求名称在 Postman GUI 中最终都是空白的
Posted
技术标签:
【中文标题】当我将 Swagger API 导入 Postman 时,所有请求名称在 Postman GUI 中最终都是空白的【英文标题】:When I import Swagger API to Postman, all request names end up blank in Postman GUI 【发布时间】:2019-04-08 02:27:03 【问题描述】:我是 QA 工程师。开发团队使用 Swagger 为我们产品的 RESTful API 生成文档。我需要将其导入 Postman 以方便调用产品的 API。
将 JSON 文件(Swagger 格式)导入 Postman 后,有 1 个但很大的问题:单个请求的所有标题(和描述)都是空白的! (见下面的屏幕截图)。
显然,这是一个已知问题,记录在这里:https://github.com/postmanlabs/postman-app-support/issues/1434
我们确实有数百个请求。我需要找到一种足够有效且简单的方法来确保 Postman 中的所有请求标题都填充了我想即时计算的值。
我一直在考虑以下方法:
编写命令行工具(使用 NodeJS 或其他 坚实的平台),它将获得: 1.要修复的集合的ID 2. api键
它将遍历所有请求 收藏。对于每个请求:如果名称字段是 空白,然后是请求 URL 的子字符串 将分配到名称字段;如果名字是 不为空,请求被单独保留。
我不确定的:
我可以通过 Postman 以编程方式执行此操作吗?将此代码放入任何一个单独的请求(作为 pre 或 post)是没有意义的。
(如果我必须在 Postman 之外编写此实用程序)
对于 NodeJS,有“postman-collection”和 “postman-sdk”,但我有点困惑,我 应该使用。
很遗憾,我还没有找到任何合适的 > 使用 C# 或 Java 维护 Postman 集合的库。
坦率地说,我对可用的选项感到很困惑。任何指导将不胜感激。
【问题讨论】:
【参考方案1】:我遇到了同样的问题,感谢 Ian T Price 解决方案(只需将 operationId
值复制到新键 summary
中)。我决定为此编写一个小的 javascript 实用程序:
function swagPostman(swaggerJson)
for (let path in swaggerJson.paths)
let methods = ["get", "head", "post", "put", "delete", "connect", "options", "trace", "patch"];
methods.map(method =>
if ((swaggerJson.paths[path] || )[method])
swaggerJson.paths[path][method].summary =
swaggerJson.paths[path][method].operationId;
);
return JSON.stringify(swaggerJson);
还制作了一个简单的笔,在其中运行带有 GUI 的脚本:https://codepen.io/0x616c65/full/pMaQpb。您只需将 swagger.json 文件复制粘贴到该笔中即可!
【讨论】:
【参考方案2】:对此的简单回答是添加一行summary: <RequestName>
我使用出色的APIs-Gurus OpenAPIDirectory repo 遇到了这个问题
这些 swagger.yaml 文件有一个可以复制的 operationId:
行,并使用 summary:
替换密钥:
awk 'if (!/ operationId:/) print ; next ; print; a=gensub(/ operationId:/, " summary:",1) ; print a' swagger.yaml > swagger-new.yaml
将此导入 Postman,然后显示正确的请求名称。
PostMan 将导入/导出功能分离到单独的插件中,但他们的插件模型在当前时间留下了 很多 不足之处。
【讨论】:
以上是关于当我将 Swagger API 导入 Postman 时,所有请求名称在 Postman GUI 中最终都是空白的的主要内容,如果未能解决你的问题,请参考以下文章
设置 AWS ApiGateway 端点所需的 API 密钥(Swagger 导入)