6.6. HTTP リクエストの指定方法

以下の例は、Fuse Online Webhook に HTTP リクエストを指定する方法を示しています。

Webhook における HTTP ボディーのみの POST リクエストの例

Webhook コネクションで開始し、Fuse Online が提供するデータベースの Todo テーブルの行を作成するインテグレーションについて考えます。

Webhook-Data Mapper-DB integration

このインテグレーションの作成中、Webhook の最初のコネクションを追加するときに {"todo":"text"} がコンテンツにある JSON インスタンスで出力データタイプを指定します。

Specify Data Shape Image

PostgresDB コネクションを最後のコネクションとして追加するとき、Invoke SQL アクションを選択し、この SQL ステートメントを指定します。

INSERT INTO TODO (TASK) VALUES (:#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 namespace。

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 namespace の名前、および 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 '{"todo":"from webhook"}' https://i-webhook-to-db-myproject.192.168.64.4.nip.io/webhook/bvGvQdpq308BcHIQQYeysFOK4plFISmghNHkRyOOk3YppitvOd

  • -H オプションは HTTP Content-Type ヘッダーを指定します。
  • -d オプションは、デフォルトで HTTP メソッドを POST に設定します。

このコマンドの実行により、インテグレーションがトリガーされます。データベースの最後のコネクションは新しいタスクをタスクテーブルに挿入します。これを確認するには、たとえば https://todo-myproject.192.168.64.4.nip.ioTodo アプリケーションを表示し、Update をクリックします。from webhook が新しいタスクとして表示されるはずです。

Webhook におけるクエリーパラメーターでの POST リクエストの例

この例では、前述の例と同じインテグレーションを使用します。

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 スキーマでは以下を行います。

  • idio.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

Webhook での GET の例

入力データを提供しない GET リクエストでインテグレーションをトリガーするには、Webhook コネクションの出力データシェイプを、定義 '{}' を持つ JSON インスタンスとして指定します。その後、クエリーパラメーターを指定しない以下の curl コマンドを呼び出すことができます。

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

前述の POST の例を変更して、クエリーパラメーターがありボディーはない GET リクエストを送信します。Webhook コネクションの出力データシェイプを、以下の定義を持つ JSON スキーマとして指定します。

{
  "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"
        }
      }
    }
  }
}

以下の curl コマンドは GET リクエストを送信します。

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