OpenAPI- 提供一个链接,以下载pdf格式的响应示例(为pdf添加示例)

OpenAPI- Provide a link to download response's examples in pdf (adding examples for pdf)

提问人:Prashant Bansod 提问时间:11/17/2023 最后编辑:Prashant Bansod 更新时间:11/20/2023 访问量:47

问:

在 Openapi 中,需要在 Swagger UI/Redoc 等中提供 pdf 格式的响应示例作为下载链接。

我正在使用 OpenAPI 3.1 和 API 之一。我需要将响应示例显示为基于外部示例托管(本地)的 pdf 文件。它可以是在 UI 中下载 PDF 的链接。尝试各种方法后,我无法在 Swagger UI 和 Redoc UI 中获取下载文件的链接。

我正在使用基于JSON的OpenAPI。我已经参考了 Open API 3 - 在响应中为单个内容类型添加标头并在 JSON 中实现它。但就我而言,我无法让它工作。

示例如下:

"/myapplication/pdfresponse": { 
"get": { 
    "responses": { 
        "200": { 
                "description": "PDF format response.",      
                "content": {
                  "application/pdf": {
                  "schema":{
                    "type": "string",
                    "format":"binary"
                    },
                  "examples":{ 
                    "exampleName":{
                        "summary":"PDF format.",
                        "externalValue": "examples/abc.pdf"
                    } 
                   }
                  } 
                },
                "headers":{
                  "Content-Disposition":{
                    "schema":{
                      "type": "string",
                      "example": "attachment; filename=abc.pdf"               
                      } 
                    } 
                  }          
               }
              }

可能是标头内容处置错误或需要其他内容。请提供JSON样本,或者如果我遗漏了什么,请告诉我。谢谢。。。!

json 下载 响应 openapi 附件

评论


答:

0赞 Jeremy Fiel 11/18/2023 #1

我认为您要要求的是提供 pdf 文档的下载 url。

您需要使用并提供 <string> 作为下载位置externalValueuri

除非您将文件托管在本地以外的其他位置,否则这可能不起作用。我有一种感觉,cors 会在 ui 的本地实例上阻止此请求。

我知道在撰写本文时,Redoc 无法解析 uris。如果您想发表评论、贡献或以其他方式了解其最新进展,您可以关注此问题externalValue

{
    "openapi": "3.1.0",
    "info": {
        "title": "test api",
        "version": "1.0.0"
    },
    "paths": {
        "/api/v1/thing": {
            "get": {
                "responses": {
                    "200": {
                        "description": "thing",
                        "headers": {
                            "content-disposition": {
                                "schema": {
                                    "type": "string"
                                },
                                "examples": {
                                    "sample_header": {
                                        "value": "application/pdf; attachment; filename: sample.pdf"
                                    }
                                }
                            }
                        },
                        "content": {
                            "application/pdf": {
                                "schema": {
                                    "type": "string",
                                    "format": "binary"
                                },
                                "examples": {
                                    "pdf_example": {
                                        "summary": "a download link for a pdf",
                                        "externalValue": "file://C:\\Users\/<user>\/Downloads\/1testing.pdf"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

评论

0赞 Prashant Bansod 11/20/2023
谢谢你的回答。是的,它给出的响应显示为一种流文本。Swagger UI 和 Redoc 无法呈现内联 pdf。因此,是否可以通过显示“下载文件”选项引用链接将此接收到的流下载为 pdf 格式
0赞 Jeremy Fiel 11/20/2023
如果您阅读了有关该问题的评论,则需要使用带有附件参数的 content-disposition 标头。我更新了答案以包含它。不确定它是否适用于 redoc
0赞 Prashant Bansod 11/20/2023
是的,我已经按照您建议的代码添加了内容处置标头。但是在 Redoc 和 Swagger UI 中没有运气来获得可下载的 pdf 链接。
0赞 Jeremy Fiel 11/20/2023
我建议在他们的两个 github 存储库上提出一张票。
0赞 Prashant Bansod 11/21/2023
好的,谢谢。。。。。!