oracle云基础设施-不允许fn应用程序使用GET方法



我是Fn项目的新手,使用fn init --runtime java HelloWorld-func创建了第一个java应用程序,并尝试了一些其他场景,但遇到了GET调用问题。

  1. 无法进行GET调用,但POST调用工作正常。我没有对源代码进行任何更改,使用了使用fninit命令创建的默认源代码

curl-X GEThttp://localhost:8080/invoke/01EJTD2K1JNG8G00GZJ0000002{"消息":不允许的方法:GET/invoke/01EJTD2K1JNG8G00GZJ0000002"}

  1. 触发器的用途是什么

fn版本0.5.97

谢谢。

Fn中有两种内置的调用函数的方法

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

这些服务于不同的目的:

invoke API是系统对系统的API,旨在允许软件和系统将函数作为其代码的一部分来调用-举个例子,如果您正在编写一个应用程序,希望使用函数来处理内部应用程序事件,则可以使用它。这个API有一个狭窄的约定,可以让客户端应用程序更容易地处理错误,并区分函数何时引发错误或fn服务器何时引发错误。这个API只接受POST请求,并且只返回一组有限的响应代码。

另一方面,HTTP触发器是一种内置的方式,可以直接在其自己的HTTP端点上公开函数(例如,用于服务网页或处理您定义的API(。

触发器从客户端接收原始HTTP请求(可以有任何动词,如PUT/POST/HEAD和任何HTTP头(,并将请求封装在对底层函数的调用中,然后底层函数可以提取有关请求的信息并生成HTTP响应。在Oracle云基础架构中,您可以做同样的事情,但您将使用API网关而不是触发器来接收传入请求(请参见下文(。

在内部,您可以将触发器视为调用端点之上的一层,它将HTTP请求封装到调用API上的调用中,使用封装的请求调用函数,然后将函数中的HTTP响应信息解包回HTTP请求。

因此,invoke API与触发器或API网关之间的关键区别在于,在invoke APIFn上定义API(以使在Fn上更容易构建软件(,但在触发器上,您定义API-您可以捕获完整的请求并定义完整的HTTP响应。

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

  • 创建一个函数。如果您希望该函数从传入请求中读取和写入HTTP信息,您可以使用FDK库来读取客户端设置的封装HTTP请求(每个FDK都支持此功能(例如nodeJS:https://github.com/fnproject/fdk-node#using-http标头和设置http状态代码python:https://github.com/fnproject/fdk-python#handling-http函数java:中的http元数据https://github.com/fnproject/fdk-java/blob/master/docs/HTTPGatewayFunctions.md(
  • 部署功能(fn deploy ...(
  • 创建一个触发器,将该函数绑定到http端点
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云基础架构中,您可以通过创建一个将函数绑定到HTTP端点的API网关来做同样的事情。这里记录了如何做到这一点的一个例子:

https://blogs.oracle.com/developers/creating-your-first-api-gateway-in-the-oracle-cloudhttps://blogs.oracle.com/developers/working-with-http-in-oracle-functions-using-the-fn-project-python-fdk

相关内容

  • 没有找到相关文章

最新更新