6.6. HTTP リクエストの指定方法
以下の例は、Fuse Online Webhook に HTTP リクエストを指定する方法を示しています。
Webhook における HTTP ボディーのみの POST リクエストの例
Webhook コネクションで開始し、Fuse Online が提供するデータベースの Todo テーブルの行を作成するインテグレーションについて考えます。
このインテグレーションの作成中、Webhook の最初のコネクションを追加するときに {"todo":"text"}
がコンテンツにある JSON インスタンスで出力データタイプを指定します。
PostgresDB コネクションを最後のコネクションとして追加するとき、Invoke SQL アクションを選択し、この SQL ステートメントを指定します。
INSERT INTO TODO (TASK) VALUES (:#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 namespace。 |
| OpenShift 用に設定された DNS ドメイン。これは、Webhook を提供している Fuse Online 環境を示しています。 |
| 各 Webhook コネクション URL に表示されます。 |
| 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
オプションは HTTPContent-Type
ヘッダーを指定します。 -
-d
オプションは、デフォルトで HTTP メソッドをPOST
に設定します。
このコマンドの実行により、インテグレーションがトリガーされます。データベースの最後のコネクションは新しいタスクをタスクテーブルに挿入します。これを確認するには、たとえば https://todo-myproject.192.168.64.4.nip.io
で Todo アプリケーションを表示し、Update をクリックします。from webhook
が新しいタスクとして表示されるはずです。
Webhook におけるクエリーパラメーターでの POST リクエストの例
この例では、前述の例と同じインテグレーションを使用します。
しかし、この例では以下のコンテンツを持つ 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 インスタンスが以下のマッピングを有効にします。
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'`