如何在 google 云函数上使用 Flask 路由?

How can I use flask routing on google cloud functions?

我想制作一个简单的无服务器后端,所以我尝试将 google 云函数与 Flask 路由一起使用。

我正在尝试测试一个简单的代码,但它不起作用。以下来源总是returns 404错误。

from flask import Flask, make_response

class Services:
    pass

def create_app(test_config = None):
    app = Flask(__name__)

    services = Services

    create_endpoints(app, services)

    return app

def create_endpoints(app, services):

    @app.route("/test", methods=['GET'])
    def test():
        return make_response('Test worked!', 200)

函数URL:######.cloudfunctions.net/test1

我试过“######.cloudfunctions.net/test1”和“######.cloudfunctions.net/test1/test”,但总是returns 404错误。

我可以使用 flask 路由吗?

根据官方文档:

Cloud Functions is a serverless execution environment for building and connecting cloud services. With Cloud Functions you write simple, single-purpose functions that are attached to events emitted from your cloud infrastructure and services. Your function is triggered when an event being watched is fired.

Python Quickstart Cloud Functions

我认为将路由器添加到云功能的方式并不奇特,但它确实有效。

我使用了对象"request"(这是一个flask.request对象)的属性"path"来读取请求中域后的路径URL

from flask import abort

def coolrouter(request):
    path = (request.path)

    if (path == "/test"):
        return "test page"
    elif (path == "/home" or path =="/"):
        return "ḧome page"
    else:
        abort (404)

请记住,云功能被设计为一次性服务,这意味着无法保存会话变量或其他内容,因为这是短暂的服务。

如果您想上传一个完整的站点,我建议您使用 App Engine,这是一个完全托管的无服务器应用程序平台。

Google 现在有 api gateway which would allow you to have a single endpoint to handle all of your routes. See goblet 作为管理和部署 api 到 api 网关

的简单方法

我同意这里给出的所有答案,但我想根据我的经验详细说明一下。由于 Cloud Functions 专为单一用途而设计。它可以处理来自 pubsub、存储等的 HTTP 请求和事件。在 Cloud Functions 前面使用 API 网关或 Cloud Endpoints 时,您可以卸载身份验证和路由,因此您的代码只有一个责任。

然而,将 Cloud Functions 用作 API 时,您将永远无法摆脱冷启动问题。服务请求有时会持续 2-10 秒或更长时间,具体取决于您的代码和编程语言的大小。因此,您可能更适合使用 Google App Engine 或您可以保留“永远在那里”的东西。

我目前正在试验云功能 + API 网关设置。我正在将一个对象的 GET、POST 和 DELETE 方法路由到同一个云函数。所以我基本上试图让它成为单一用途的方式,即一个函数只处理对一个对象的请求。这可以通过所用方法的开关盒轻松实现,因此不需要路由。示意图示例:

云功能一:

  • 路径:/博客
  • 方法:获取、POST、删除
  • 用途:处理对博客对象的所有操作

云功能二:

  • 路径:/posts
  • 方法:获取、POST、删除
  • 目的:处理对 post 个对象的所有操作