1

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

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

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

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

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

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

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

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

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

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

4

2 回答 2

0

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

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

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

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

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

于 2018-12-29T13:05:35.970 回答
0

我不是专家,但到目前为止似乎无法在 trigger中指定 http 方法。检查最新的触发器规范:如您所见,这里没有http方法的概念。

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

例如,在 Java(使用fdk-javav1.0.80)中,您可以将com.fnproject.fn.api.httpgateway.HTTPGatewayContext其用作函数的第一个参数,如文档的“从函数访问 HTTP 信息”部分所述:

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

使用它可以:

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

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

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

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

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

于 2018-12-28T12:20:01.610 回答