如何解决GET方法不允许用于FN应用程序
我是Fn项目的新手,已经使用fn init --runtime java HelloWorld-func
在Java中创建了第一个应用程序,并尝试了其他几种方案,但是遇到了GET调用问题。
卷曲-X GET http:// localhost:8080 / invoke / 01EJTD2K1JNG8G00GZJ0000002 {“ message”:“”方法不允许:GET / invoke / 01EJTD2K1JNG8G00GZJ0000002“}
- 触发器的用途是什么?
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,您将:
- 创建一个函数。如果您希望该函数从传入请求中读取和写入HTTP信息,则可以使用FDK库读取客户端设置的封装的HTTP请求(每个FDK都对此提供支持(例如,nodeJS:https://github.com/fnproject/fdk-node#using-http-headers-and-setting-http-status-codes python:{ {3}} java:https://github.com/fnproject/fdk-python#handling-http-metadata-in-http-functions)
- 部署功能(
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 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 举报,一经查实,本站将立刻删除。