我如何在云函数中提供像swagger UI这样的静态文件 [英] How can I serve static files like swagger ui in Cloud functions

查看:23
本文介绍了我如何在云函数中提供像swagger UI这样的静态文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用Go在云函数中服务swagger-ui-dist

离开云函数环境我会这样做:

package main

import (
"fmt"
"net/http"
)

func main() {

fs := http.FileServer(http.Dir("./swagger-ui-dist"))
http.Handle("/swaggerui/", http.StripPrefix("/swaggerui/", fs))

http.ListenAndServe(":8080", nil)
}

但是,由于云函数使用普通函数作为处理程序,并使用标准HTTP.HanlderFunc接口,因此我不知道如何使其工作。

我曾尝试模拟此场景,以使用HTTP.ServeFile进行测试,但不起作用。似乎没有下载文件夹的所有内容。

package main

import (
    "fmt"
    "net/http"
)

func cloudFunctionHandler(w http.ResponseWriter, r *http.Request) {
    http.ServeFile(w, r, "./swagger-ui-dist")
}
func main() {

    http.HanldeFunc("/swaggerui/", handler)
    http.ListenAndServe(":8080", nil)
}

推荐答案

实际上有三种可能(我知道):

  1. 从CDN服务静态文件。例如来自http://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.40.0/
  2. 在不同的终结点上自己托管静态文件
  3. 将静态文件添加到云函数的根文件夹中。这些代码将与您的代码打包在一起,因此在部署时可用

(我选择了选项3)

对于选项2和选项3,您必须覆盖swaggerui用于其静态资源的文件夹。如何执行此操作取决于如何配置SWAGGER用户界面。

在我的例子中,我使用flask_rest x Python包来生成swagger.json并提供swaggerui。所以我这样做了:

from flask_restx.apidoc import apidoc

apidoc.static_folder = '<MY STATIC FOLDER PATH' # e.g. os.path.abspath('static/swaggerui')

此外,在运行gcloud function deploy ...之前,您需要将文件从swaggerui库复制到函数的根目录。

我在配置项管道期间将static文件夹从flASK_RESTX复制到函数的根目录。

希望这对任何人都有帮助!

这篇关于我如何在云函数中提供像swagger UI这样的静态文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆