我是Fn项目的新手,使用fn init --runtime java HelloWorld-func在java中创建了第一个应用程序,并且很少尝试其他场景,但是GET call遇到了一个问题。
创建的默认代码。
curl -X GET http://localhost:8080/invoke/01EJTD2K1JNG8G00GZJ0000002 {“message”:“不允许的方法: GET /invoke/01EJTD2K1JNG8G00GZJ00002”}
fn版本0.5.97
谢谢。
发布于 2020-09-23 10:28:38
在Fn中有两种内置的调用函数的方法。
这些服务有不同的目的:
invoke API是system to system API,旨在允许软件和系统调用函数作为代码的一部分--举个例子,如果您想要使用函数来处理内部应用程序事件,可以使用它。这个API有一个狭窄的契约,使客户端应用程序更容易处理错误,并区分函数何时引发错误或fn服务器引发错误。这个API只接受POST请求,并且只返回一组有限的响应代码。
另一方面,HTTP触发器是一种内置的方式,可以直接在它们自己的HTTP端点上公开函数(例如,为web页面提供服务,或者处理您定义的API )。
触发器从客户端接收原始HTTP请求(客户机可以有任何动词,如PUT/POST/HEAD和任何HTTP报头),并将请求封装在对底层函数的调用中,然后调用该函数,该函数可以提取有关请求的信息并生成HTTP响应。在中,您可以做同样的事情,但是您可以使用API网关而不是触发器来接收传入的请求(参见下面)。
在内部,您可以看到触发器是调用端点之上的一个层,该层将HTTP请求封装到invoke API上的调用中,使用包装好的请求调用函数,然后将HTTP响应信息从函数中解压回HTTP请求。
因此,invoke API与触发器或API网关之间的关键区别在于,在invoke API上,Fn定义了API (使在Fn之上构建软件变得更容易),但是在触发器上定义了API --您可以捕获完整的请求并定义完整的HTTP响应。
在Fn中,如果您想公开由处理GET并返回网页的函数实现的REST,您可以:
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调用该函数
curl http://localhost:8080/t/node/trig
...在中,您可以通过创建一个将函数绑定到HTTP端点的API网关来完成同样的任务。这里记录了一个如何做到这一点的例子:
https://blogs.oracle.com/developers/creating-your-first-api-gateway-in-the-oracle-cloud https://blogs.oracle.com/developers/working-with-http-in-oracle-functions-using-the-fn-project-python-fdk
https://stackoverflow.com/questions/64006637
复制相似问题