【问题标题】:Fn project is missing http operations (CRUD)Fn 项目缺少 http 操作 (CRUD)
【发布时间】:2018-12-28 10:57:25
【问题描述】:

我整个下午都对容器原生无服务器平台“fn 项目”-http://fnproject.io/ 感到非常兴奋。

我喜欢 FaaS 模型的想法,但无意在应用程序的大部分生命周期内将自己锁定在特定的云供应商中 - 以及其他几个原因,包括希望在任何地方的小型服务器上启动整个应用程序如果我选择。

fn 项目似乎非常适合我的需求,直到我阅读完文档和所有相关的博客文章并突然想‘什么?等等……什么??? http 操作在哪里?'。

我在任何地方都找不到一个单一的参考资料,说明是否可以为不同的 http 操作(即 POST、PUT、PATCH、DELETE)设置 http 触发器,更不用说我将如何做到这一点了。

我想构建 REST api(或者至少可以构建基于 json 的基于 http 的 RPC api - 如果它没有超媒体链接,它就不是 REST ;)但是我们不要在这个线程中进入那个)

我在这里遗漏了什么(当然是正确的文档)??

谁能告诉我我将如何做到这一点,或者甚至告诉我我是否完全误解了我应该用它做什么?

我现在的兴奋已经减弱,但我希望有人会改变正确的信息。

我找不到其他人抱怨这个感觉很奇怪,所以我认为这可能表明我的误解。

OpenFaaS 等其他解决方案看起来很有趣,但如果可以避免的话,我不想学习如何部署 Kubernetes 和 docker swarms :)

【问题讨论】:

    标签: docker faas fn openfaas


    【解决方案1】:

    我不是专家,但目前似乎无法在触发器内指定 http 方法。检查latest trigger spec :如您所见,这里没有http 方法的概念。

    但是,处理不同的 HTTP 方法可以在函数本身内部完成。

    例如,在 Java 中(使用 fdk-java v1.0.80),您可以使用 com.fnproject.fn.api.httpgateway.HTTPGatewayContext 作为函数的第一个参数,如文档的“Accessing HTTP Information From Functions”部分所述:

    在 Fn for Java 中,当您的函数由 HTTP 触发器(或其他兼容的 HTTP 网关)提供服务时,您可以通过添加“com.fnproject.fn.api”来访问函数的传入请求标头。 httpgateway.HTTPGatewayContext' 参数添加到函数的参数中。

    使用它可以:

    • ...
    • 访问方法并请求触发器的 URL
    • ...

    然后,您可以通过在作为参数传递的 HTTPGatewayContext 上调用 getMethod() 来检索 HTTP 方法。

    在其他语言中(使用其他 fdk),也可以这样做:

    从这个不同的上下文中,您将能够在fn invoke --method=[GET|POST|...](通过fn-http-method 标头)时获得method 参数。

    这里的主要缺点是所有 HTTP 方法都应该在同一个函数中处理。尽管如此,您可以将代码结构化为每个方法只有一个类。

    【讨论】:

    • 谢谢norbdj——你已经基本证实了我最终得出的结论。我真的希望我错了,因为我相信你会同意,它首先消除了在如此细粒度级别上解耦功能所做的大量艰苦工作。非常感谢您的意见,对于任何有相同感受的人来说,这无疑是一个很好的参考。
    【解决方案2】:

    经过进一步思考,现在似乎很清楚我的实际误解是什么......

    当我过去构建无服务器框架服务(或使用 terraform 构建和部署 Lambda 函数)时,我一直在部署到 AWS,因此一直在使用 AWS 的 API Gateway 产品(他们的产品实际上称为 API Gateway,但它对认识到 API Gateway 是一种分布式系统/微服务设计模式)。

    API 网关可以将特定的 http 请求类型(包括方法(GET、POST、PUT、DELETE))路由到所需的函数。

    Fn 项目和 OpenFaaS 等平台不提供开箱即用的 api 网关解决方案,看来我们需要自己解决这个问题。

    上面提到的这些平台是关于功能部署的。我们通过我们选择的产品找到其他位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多