6.6. 如何指定 HTTP 请求


以下示例演示了如何为 Fuse Online Webhook 指定 HTTP 请求。

仅使用 HTTP 正文的 POST 请求的 Webhook 示例

考虑一个集成,它以 Webhook 连接开头,然后在 Fuse Online 提供的数据库的 Todo 表中创建一个行:

Webhook-Data Mapper-DB integration

在创建此集成时,当添加 Webhook 启动连接时,您可以使用带有此内容的 JSON 实例指定其输出数据类型: {"setuptools":"text"}:

Specify Data Shape Image

当您将 PostgresDB 连接添加为完成连接时,您可以选择 Invoke SQL 操作并指定此 SQL 语句:

插入 TODO (TASK)值(:#TASK)

添加数据库连接后,添加一个映射步骤:

Map Todo to Task

您保存并发布集成。当它运行时,您可以复制 Fuse Online 提供的外部 URL:

External URL

要了解外部 URL 的部分,请考虑以下示例 URL:

https://i-webhook-to-db-myproject.192.168.64.4.nip.io/webhook/bvGvQdpq308BcHIQQYeysFOK4plFISmghNHkRyOOk3YppitvOd

描述

i-

Fuse Online 始终在 URL 的开头插入这个值。

webhook-to-db

集成的名称。

myproject

包含运行集成的 pod 的 OpenShift 命名空间。

192.168.64.4.nip.io

为 OpenShift 配置的 DNS 域。这表示提供 webhook 的 Fuse Online 环境。

webhook

出现在每个 Webhook 连接 URL 中。

bvGvQdpq308BcHIQQYeysFOK4plFISmghNHkRyOOk3YppitvOd

在向集成添加 Webhook 连接时,Fuse Online 提供的 Webhook 连接令牌。令牌是一个随机字符串,用于提供安全性,从而使 URL 难以识别,这样可防止其他人发送请求。

在请求中,您可以指定 Fuse Online 提供的令牌,或者您可以自行定义。如果您自行定义,请确保难以猜测。

正如您在外部 URL 中看到的,Fuse Online 从集成的名称、OpenShift 命名空间的名称和 OpenShift DNS 域构造主机名。Fuse Online 删除非法字符,并将空格转换为连字符。在外部 URL 示例中,这是主机名:

https://i-webhook-to-db-myproject.192.168.64.4.nip.io

要使用 curl 调用 Webhook,您可以指定命令,如下所示:

curl -H 'Content-Type: application/json' -d '{"setuptools":"from webhook"}' https://i-webhook-to-db-myproject.192.168.64.4.nip.io/webhook/bvGvQdpq308BcHIQQYeysFOK4plFISmghNHkRyOOk3YppitvOd

  • -H 选项指定 HTTP Content-Type 标头。
  • 默认情况下,d 选项将 HTTP 方法设置为 POST

执行此命令会触发集成。数据库完成连接会在 tasks 表中插入新任务。要查看这一点,请在其中显示 Todo 应用程序,例如 https://todo-myproject.192.168.64.4.nip.io,点 Update,您应该 从 Webhook 看到为新任务。

带有查询参数的 POST 请求的 Webhook 示例

在本例中,请考虑与上例中的相同集成:

Webhook-Data Mapper-DB integration

但是,在这个示例中,您可以通过指定使用此内容的 JSON 模式来定义 Webhook 连接输出数据类型:

{
  "type": "object",
  "definitions": {},
  "$schema": "http://json-schema.org/draft-07/schema#",
  "id": "io:syndesis:webhook",
  "properties": {
    "parameters": {
      "type": "object",
      "properties": {
        "source": {
          "type": "string"
        },
        "status": {
          "type": "string"
        }
      }
    },
    "body": {
      "type": "object",
      "properties": {
        "company": {
          "type": "string"
        },
        "email": {
          "type": "string"
        },
        "phone": {
          "type": "string"
        }
      }
    }
  }
}

在这个 JSON 模式中:

  • id 必须设置为 io.syndesis.webhook
  • parameters 部分必须指定 HTTP 查询参数。
  • body 部分必须指定正文内容,并可像您需要一样复杂。例如,它可以定义嵌套属性以及数组。

这提供了 Webhook 连接器需要为集成中的下一步准备内容所需的信息。

要使用 curl 发送 HTTP 请求,请调用如下命令:

curl -H 'Content-Type: application/json' -d '{"company":"Gadgets","email":"sales@gadgets.com","phone":"+1-202-555-0152"}'https://i-webhook-params-to-db-myproject.192.168.42.235.nip.io/webhook/ZYWrhaW7dVk097vNsLX3YJ1GyxUFMFRteLpw0z4O69MW7d2Kjg?source=web&status=new

当 Webhook 连接收到此请求时,它会创建一个 JSON 实例,如下所示:

{
  "parameters": {
    "source": "web",
    "status": "new"
  },
  "body": {
    "company": "Gadgets",
    "email": "sales@gadgets.com",
    "phone": "+1-202-555-0152"
  }
}

这是启用以下映射的内部 JSON 实例:

Map to Add Lead

带有 GET 的 Webhook 示例

要触发与不提供输入数据的 GET 请求集成,请将 Webhook 连接输出数据指定为带有定义 '{}' 的 JSON 实例。然后,您可以调用以下 curl 命令,该命令没有指定查询参数:

curl 'https://i-webhook-params-to-db-myproject.192.168.42.235.nip.io/webhook/ZYWrhaW7dVk097vNsLX3YJ1GyxUFMFRteLpw0z4O69MW7d2Kjg'

您可以更改前面的 POST 示例,以使用查询参数发送 GET 请求,但没有正文。您将以 JSON 模式的形式指定 Webhook 连接输出数据,如下所示。

{
  "type": "object",
  "definitions": {},
  "$schema": "http://json-schema.org/draft-07/schema#",
  "id": "io:syndesis:webhook",
  "properties": {
    "parameters": {
      "type": "object",
      "properties": {
        "source": {
          "type": "string"
        },
        "status": {
          "type": "string"
        }
      }
    }
  }
}

以下是发送 GET 请求的 curl 命令:

curl 'https://i-webhook-params-to-db-myproject.192.168.42.235.nip.io/webhook/ZYWrhaW7dVk097vNsLX3YJ1GyxUFMFRteLpw0z4O69MW7d2Kjg?source=web&status=new'`

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.