Fn 项目缺少 http 操作(CRUD)
Fn project is missing http operations (CRUD)
我整个下午都对容器原生无服务器平台感到非常兴奋 'fn project' - http://fnproject.io/。
我喜欢 FaaS 模型的想法,但无意在应用程序的大部分生命周期中将自己锁定在特定的云供应商中 - 以及其他几个原因,包括希望在一个小的平台上启动整个应用程序服务器在任何地方,如果我选择的话。
fn 项目似乎很适合我的需求,直到我仔细阅读了文档和所有相关的博客文章并突然想到 'what? Wait....what??? Where are the http operations?'。
我在任何地方都找不到单个参考资料说明是否可以为不同的 http 操作(即 POST、PUT、PATCH、DELETE)设置 http 触发器,更不用说我会怎么做了.
我想构建 REST api(或者肯定至少 json-服务基于 http 的 RPC apis - 如果它没有超媒体链接它不是 REST ;) 但我们不要在这个线程中讨论那个)
我是不是漏掉了什么(当然是正确的文档)??
任何人都可以告诉我我将如何做到这一点,或者甚至告诉我我是否完全误解了我应该用它做什么?
我的兴奋暂时减弱了,但我希望有人会根据正确的信息做出改变。
奇怪的是我找不到其他人对此抱怨,所以我认为这可能表明我的误解。
OpenFaaS 等其他解决方案看起来很有趣,但如果可以避免,我不想学习如何部署 kubernetes 和 docker swarm :)
我不是专家,但截至目前似乎无法在触发器内指定 http 方法。检查 latest trigger spec :如您所见,这里没有 http
方法的概念。
但是,可以在函数内部处理不同的 HTTP 方法。
例如,在 Java(使用 fdk-java
v1.0.80)中,您可以使用文档的 com.fnproject.fn.api.httpgateway.HTTPGatewayContext
as the first parameter of the function, as described in the section "Accessing HTTP Information From Functions":
In Fn for Java, when your function is being served by an HTTP trigger (or another compatible HTTP gateway) you can get access to both the incoming request headers for your function by adding a 'com.fnproject.fn.api.httpgateway.HTTPGatewayContext' parameter to your function's parameters.
Using this allows you to :
- ...
- Access the method and request URL for the trigger
- ...
然后您可以通过在作为参数传递的 HTTPGatewayContext
上调用 getMethod()
来检索 HTTP 方法。
在其他语言中(与其他 fdk),也可以这样做:
- 在Go : example calling
RequestMethod()
on context
- 在Ruby : class
HTTPContext
- 在Python : class
HTTPGatewayContext
- 在Node : class
HTTPGatewayContext
从这些不同的上下文中,您将能够在 fn invoke --method=[GET|POST|...]
时(通过 fn-http-method
header)获得 method
参数。
这里的主要缺点是所有 HTTP 方法都应该在同一个函数中处理。尽管如此,您可以将代码结构化为每个方法只有一个 class。
经过进一步思考,现在我的实际误解似乎很清楚了....
当我过去构建无服务器框架服务(或使用 terraform 构建和部署 Lambda 函数)时,我一直在部署到 AWS,因此一直在使用 AWS 的 API 网关产品(他们的产品实际上称为API 网关,但重要的是要认识到 API 网关是一种分布式系统/微服务设计模式)。
API 网关可以将特定的 http 请求类型(包括方法(GET、POST、PUT、DELETE))路由到所需的函数。
Fn 项目和 OpenFaaS 等平台不提供开箱即用的 api 网关解决方案,看来我们需要自己解决这个问题。
上面提到的这些平台都是关于功能部署的。我们通过我们选择的产品找到其他位。
我整个下午都对容器原生无服务器平台感到非常兴奋 'fn project' - http://fnproject.io/。
我喜欢 FaaS 模型的想法,但无意在应用程序的大部分生命周期中将自己锁定在特定的云供应商中 - 以及其他几个原因,包括希望在一个小的平台上启动整个应用程序服务器在任何地方,如果我选择的话。
fn 项目似乎很适合我的需求,直到我仔细阅读了文档和所有相关的博客文章并突然想到 'what? Wait....what??? Where are the http operations?'。
我在任何地方都找不到单个参考资料说明是否可以为不同的 http 操作(即 POST、PUT、PATCH、DELETE)设置 http 触发器,更不用说我会怎么做了.
我想构建 REST api(或者肯定至少 json-服务基于 http 的 RPC apis - 如果它没有超媒体链接它不是 REST ;) 但我们不要在这个线程中讨论那个)
我是不是漏掉了什么(当然是正确的文档)??
任何人都可以告诉我我将如何做到这一点,或者甚至告诉我我是否完全误解了我应该用它做什么?
我的兴奋暂时减弱了,但我希望有人会根据正确的信息做出改变。
奇怪的是我找不到其他人对此抱怨,所以我认为这可能表明我的误解。
OpenFaaS 等其他解决方案看起来很有趣,但如果可以避免,我不想学习如何部署 kubernetes 和 docker swarm :)
我不是专家,但截至目前似乎无法在触发器内指定 http 方法。检查 latest trigger spec :如您所见,这里没有 http
方法的概念。
但是,可以在函数内部处理不同的 HTTP 方法。
例如,在 Java(使用 fdk-java
v1.0.80)中,您可以使用文档的 com.fnproject.fn.api.httpgateway.HTTPGatewayContext
as the first parameter of the function, as described in the section "Accessing HTTP Information From Functions":
In Fn for Java, when your function is being served by an HTTP trigger (or another compatible HTTP gateway) you can get access to both the incoming request headers for your function by adding a 'com.fnproject.fn.api.httpgateway.HTTPGatewayContext' parameter to your function's parameters.
Using this allows you to :
- ...
- Access the method and request URL for the trigger
- ...
然后您可以通过在作为参数传递的 HTTPGatewayContext
上调用 getMethod()
来检索 HTTP 方法。
在其他语言中(与其他 fdk),也可以这样做:
- 在Go : example calling
RequestMethod()
on context - 在Ruby : class
HTTPContext
- 在Python : class
HTTPGatewayContext
- 在Node : class
HTTPGatewayContext
从这些不同的上下文中,您将能够在 fn invoke --method=[GET|POST|...]
时(通过 fn-http-method
header)获得 method
参数。
这里的主要缺点是所有 HTTP 方法都应该在同一个函数中处理。尽管如此,您可以将代码结构化为每个方法只有一个 class。
经过进一步思考,现在我的实际误解似乎很清楚了....
当我过去构建无服务器框架服务(或使用 terraform 构建和部署 Lambda 函数)时,我一直在部署到 AWS,因此一直在使用 AWS 的 API 网关产品(他们的产品实际上称为API 网关,但重要的是要认识到 API 网关是一种分布式系统/微服务设计模式)。
API 网关可以将特定的 http 请求类型(包括方法(GET、POST、PUT、DELETE))路由到所需的函数。
Fn 项目和 OpenFaaS 等平台不提供开箱即用的 api 网关解决方案,看来我们需要自己解决这个问题。
上面提到的这些平台都是关于功能部署的。我们通过我们选择的产品找到其他位。