6.6. 如何指定 HTTP 请求
以下示例演示了如何为 Fuse Online Webhook 指定 HTTP 请求。
仅使用 HTTP 正文的 POST 请求的 Webhook 示例
考虑一个集成,它以 Webhook 连接开头,然后在 Fuse Online 提供的数据库的 Todo 表中创建一个行:
在创建此集成时,当添加 Webhook 启动连接时,您可以使用带有此内容的 JSON 实例指定其输出数据类型: {"setuptools":"text"}
:
当您将 PostgresDB 连接添加为完成连接时,您可以选择 Invoke SQL 操作并指定此 SQL 语句:
插入 TODO (TASK)值(:#TASK)
添加数据库连接后,添加一个映射步骤:
您保存并发布集成。当它运行时,您可以复制 Fuse Online 提供的外部 URL:
要了解外部 URL 的部分,请考虑以下示例 URL:
https://i-webhook-to-db-myproject.192.168.64.4.nip.io/webhook/bvGvQdpq308BcHIQQYeysFOK4plFISmghNHkRyOOk3YppitvOd
值 | 描述 |
---|---|
| Fuse Online 始终在 URL 的开头插入这个值。 |
| 集成的名称。 |
| 包含运行集成的 pod 的 OpenShift 命名空间。 |
| 为 OpenShift 配置的 DNS 域。这表示提供 webhook 的 Fuse Online 环境。 |
| 出现在每个 Webhook 连接 URL 中。 |
| 在向集成添加 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
选项指定 HTTPContent-Type
标头。 -
默认情况下,
d
选项将 HTTP 方法设置为POST
。
执行此命令会触发集成。数据库完成连接会在 tasks 表中插入新任务。要查看这一点,请在其中显示 Todo 应用程序,例如 https://todo-myproject.192.168.64.4.nip.io
,点 Update,您应该 从 Webhook
看到为新任务。
带有查询参数的 POST 请求的 Webhook 示例
在本例中,请考虑与上例中的相同集成:
但是,在这个示例中,您可以通过指定使用此内容的 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 实例:
带有 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'`