gpt4 book ai didi

oracle-cloud-infrastructure - 不允许 GET 方法用于 fn 应用程序

转载 作者:行者123 更新时间:2023-12-02 02:38:15 24 4
gpt4 key购买 nike

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

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

curl -X GET http://localhost:8080/invoke/01EJTD2K1JNG8G00GZJ0000002{"message":"Method not allowed: 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)

    它们有不同的目的:

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

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

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

    在内部,您可以将触发器视为调用端点之上的一层,它将 HTTP 请求包装到调用 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 云基础设施中,您可以通过创建将函数绑定(bind)到 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

    关于oracle-cloud-infrastructure - 不允许 GET 方法用于 fn 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64006637/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com