微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GET方法不允许用于FN应用程序

如何解决GET方法不允许用于FN应用程序

我是Fn项目的新手,已经使用fn init --runtime java HelloWorld-func在Java中创建了第一个应用程序,并尝试了其他几种方案,但是遇到了GET调用问题。

  1. 无法进行GET呼叫,但POST呼叫可以正常工作。使用认的使用fn init命令创建的代码,我没有对源代码进行任何更改。

卷曲-X GET http:// localhost:8080 / invoke / 01EJTD2K1JNG8G00GZJ0000002 {“ message”:“”方法不允许:GET / invoke / 01EJTD2K1JNG8G00GZJ0000002“}

  1. 触发器的用途是什么?

fn版本0.5.97

谢谢。

解决方法

在Fn中,有两种内置的函数调用方式

  • 调用API(例如POST http:// localhost:8080 / invoke / 01EJTD2K1JNG8G00GZJ0000002)
  • HTTP触发器(例如GET / PUT / POST / HEAD http:// localhost:8080 / t / appname / triggername)

这些服务有不同的用途:

invoke API是系统到系统的API,旨在允许软件和系统将功能作为其代码的一部分进行调用-举一个示例,如果您要编写一个要使用函数来处理内部应用程序的应用程序,则可以使用此示例事件。该API的合同范围狭窄,可以使客户端应用程序更容易处理错误,并分辨出函数引发错误或fn服务器引发错误之间的区别。该API仅接受POST请求,并且仅返回有限的一组响应代码。

另一方面,

HTTP触发器是一种内置方法,可以直接在其自己的HTTP端点上公开功能(例如,用于提供网页或处理您定义的API)。

触发器触发来自客户端的原始HTTP请求(该请求可以具有任何动词,如PUT / POST / HEAD和任何HTTP标头),并将请求包装在对基础函数的调用中,然后该基础函数可以提取有关请求的信息并生成HTTP响应。在Oracle Cloud Infrastructure中,您可以执行相同的操作,但是您将使用API​​网关而不是触发器来接收传入的请求(请参见下文)。

在内部,您可以看到触发器是在调用端点之上的一层,该层将HTTP请求包装到invoke API的调用中,使用包装的请求调用该函数,然后将来自该函数的HTTP响应信息重新包装回HTTP请求。

因此,调用API和触发器或API网关之间的主要区别在于,在调用API上, Fn 定义了API(以便更轻松地在Fn之上构建软件),但在触发定义API-您可以捕获完整的请求并定义完整的HTTP响应。

在Fn中,如果您想公开由处理GET并返回网页的函数实现的REST API,您将:

   fn create trigger <appname> <funcname> <triggername>  --type http  --source http 
  • 获取已发布的触发器端点:
fn list trigger <appname> 

testapp testtrigger 01E6YM3R80NG8G00GZJ000000R  http    /trig   http://localhost:8080/t/node/trig
  • 通过其HTTP端点调用功能
curl http://localhost:8080/t/node/trig
...

在Oracle Cloud Infrastructure中,您可以通过创建将功能绑定到HTTP端点的API网关来执行相同的操作。此处记录了如何执行此操作的示例:

https://github.com/fnproject/fdk-java/blob/master/docs/HTTPGatewayFunctions.md https://blogs.oracle.com/developers/creating-your-first-api-gateway-in-the-oracle-cloud

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。