【问题标题】:Correct media type for swagger spec for downloading zip file正确下载 zip 文件的 swagger 规范的媒体类型
【发布时间】:2021-02-02 16:07:36
【问题描述】:

我正在创建一个允许下载 zip 文件的 api,因此为此我正在寻找正确的媒体类型,以便在 swagger "2.0" 规范中作为响应发送此 zip 文件。

我当前的 api 规范看起来像这样

/config:
  get:
    produces:
      - application/zip
    responses:
        200: # OK
          description: All config files
          schema:
            type: string
            format: binary

我已经用“go-swagger”编译了这个规范并为此实现了后端,但是当尝试调用这个 API 时,我得到了这个错误

http: panic serving 127.0.0.1:20366: applicationZip producer has not yet been implemented

在 swagger 的文档中我没有看到这种媒体类型

Official swagger media types

那么,如果我们想提供一个 API 来下载 zip 文件,那么正确的媒体类型应该是什么。 提前致谢

【问题讨论】:

    标签: api go swagger openapi go-swagger


    【解决方案1】:

    你需要实现这个。

    由于以下生成的代码而发生错误:

    func NewSampleAPI(spec *loads.Document) *SampleAPI {
        return &SampleAPI{
        ...
            ApplicationZipProducer: runtime.ProducerFunc(func(w io.Writer, data interface{}) error {
                return errors.NotImplemented("applicationZip producer has not yet been implemented")
            }),
    

    所以在调用NewSampleAPI之后,你应该设置ApplicationZipProducer

    api := operations.NewSampleAPI(swaggerSpec)
    api.ApplicationZipProducer = func(w io.Writer, data interface{}) error {
        ...
    }
    

    【讨论】:

    【解决方案2】:

    你应该使用“application/octet-stream”来实现将文件下载为附件的api,并且由于它的Producer已经默认实现,所以你不会遇到这个问题。

    【讨论】:

    • 在 Swagger 中使用媒体类型“application/octet-stream”可以工作,但 Swagger 并不具体了解 zip 文件,因此您将下载没有扩展名的文件。下载后,您需要添加 .zip 扩展名。 Postman 等其他程序确实了解行业标准“application/zip”
    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 2016-12-27
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    相关资源
    最近更新 更多