HTTP Request 設定リファレンス

HTTP Request 操作の典型的な使用方法は、デフォルトの GET メソッドを使用した外部 HTTP サービスのコンシュームです。デフォルトでは、GET および OPTIONS メソッドは要求でペイロードを送信しないため、HTTP 要求の本文は空です。他のメッセージでは、要求の本文としてメッセージペイロードが送信されます。

要求の送信後、コネクタは応答を受信し、それをアプリケーションのフローの次の要素に渡します。

この要求操作には少なくともホスト URI の設定が必要で、これにはパスが含まれることがあります。この要求操作には次の認証種別を設定できます。

  • Basic (基本)

  • OAuth

  • NT LAN Manager (NTLM)

  • ダイジェスト

Mule メッセージと HTTP Request のマップ

デフォルトでは、HTTP Request 操作は Mule メッセージペイロードを HTTP 要求の本文として送信しますが、これは DataWeave スクリプトまたは式を使用してカスタマイズできます。

カスタムパラメータの追加

要求の本文に加えて、以下を設定できます。

  • ヘッダー

  • クエリパラメータ

  • URI パラメータ

  • 複数ヘッダーまたはパラメータのマップ

デフォルトでは、HTTP コネクタは HTTP 要求ヘッダーセクションのサイズ (要求行 + ヘッダー) を最大 8191 バイトに制限します。許可されたヘッダーセクションでこのバイト数を増やすには、wrapper.conf ファイルの mule.http.headerSectionSize を設定するか、Mule Runtime を開始するときにコマンドラインで次のコマンドを実行します。

./mule -M-Dmule.http.headerSectionSize=16000

ヘッダー

[Headers (ヘッダー)] を選択してヘッダーを要求に追加します。たとえば、ヘッダー名 HeaderName1 および HeaderName2 を追加し、ヘッダー値 HeaderValue1 および HeaderValue2 を追加します。DataWeave 式を使用できます。たとえば、#[{'HeaderName1' : 'HeaderValue1', 'HeaderName2' : 'HeaderValue2'}] のようにします。

クエリパラメータ

[General (全般)] > [Request (要求)] > [Query Parameters (クエリパラメータ)] で、プラスアイコン (+) をクリックしてパラメータを要求に追加します。パラメータの名前と値を入力するか、DataWeave 式を使用して名前と値を定義します。

URI パラメータ

要求のパスにプレースホルダ (/customer/{customerId} など) を使用する場合は、URI パラメータを設定します。URI パラメータを設定するには、[Path (パス)] 項目にプレースホルダを中括弧で囲んで入力します。[URI Parameters (URI パラメータ)] を選択し、+ をクリックして名前と値を入力します。たとえば、名前と値として customerId20 を入力します。

http mule4 uriparams

または、名前項目と値項目で DataWeave 式を使用します。

アプリケーションが実行されると、http://www.example.com/customer/20 への GET 要求が実行されます。

動的パラメータおよびヘッダー

設計時に要求で何個のクエリパラメータやヘッダーが必要かわからない場合、DataWeave と変数マップを使用して動的にパラメータまたはヘッダーを要求に割り当てます。

たとえば、customMap という名前のマップ変数を作成し、DataWeave を使用して値のマップを割り当ててから、その変数を使用して要求のヘッダーをセットアップできます。

#[vars.customMap ++ {'HeaderName1' : 'HeaderValue1'}]

URI パラメータを動的に設定するには、パラメータのマップを返す DataWeave 式を使用します。次に例を示します。

  • [Path (パス)] を設定: /test/{p1}/{p2}

  • URI パラメータ名: p1 と p2

  • URI パラメータ値: #[vars.customMap]

  • 要求の前に、p1 がすでに設定されていると想定: #[vars.customMap ++ {'p2': 'customer'}]

コネクタは要求ごとにパラメータを解決し、要求で指定された順序に従って現在のメッセージのコンテキストで DataWeave 式を評価します。同じパラメータが複数回定義されている場合、最新の値が使用されます。

POST 要求での form (フォーム) パラメータの送信

POST 要求でパラメータを送信するには、[General (全般)] > [Request (要求)] で、POST メソッドを選択します。 [Body (本文)] で、Mule メッセージのペイロードを、送信するパラメータの名前と値を指定した application/x-www-form-urlencoded として作成します。次に例を示します。

#[output application/x-www-form-urlencoded --- {'key1':'value1', 'key2':'value2'}]

POST 要求が Content-Type: application/x-www-form-urlencoded で指定したホストの場所に送信されます。本文は「key1=value1&key2=value2」です。

HTTP 応答と Mule メッセージのマップ

HTTP 応答は、HTTP 要求が Mule メッセージにマップされるのと似た方法で、Mule メッセージにマップされます。

次の要素は HTTP 応答に適用​されません​。

  • クエリパラメータ

  • URI パラメータ

  • HTTP 要求 URI に関連するインバウンド属性

さらに、HTTP Request 操作では、応答受信時に次の属性が Mule メッセージに追加されます。

  • attributes.statusCode: HTTP 応答の状況コード

  • attributes.reasonPhrase: HTTP 応答の理由を示す語句

ラウンドロビン方式の要求

この要求操作は、設定されたホストにラウンドロビン DNS を使用して接続します。Mule Runtime は、指定されたホストに関連付けられているすべての IP アドレスを解決し、要求をすべての返された IP 間に分散することで負荷分散を行います。

認証が必要なリソースに接続するとき、外部サービスはサービスのホスト下の IP アドレス間でセッション情報を複製する必要があります。そうしないと、要求が認証されずに拒否される可能性があります。

Mule Runtime 開始時にサービスホスト名を mule.http.disableRoundRobin システムプロパティに追加するために必要なセッション維持を外部リソースが処理しない場合は、次のようにします。

./mule -M-Dmule.http.disableRoundRobin=serverhostname.com

この設定により、要求は、設定されたホストに接続するときにラウンドロビン DNS を使用しません。

HTTP 応答の検証

HTTP Request 操作は、HTTP 応答を受信すると状況コードで応答を検証します。デフォルトでは、状況コードが 400 以上の場合はエラーをスローします。そのため、サーバが 404 (リソースが見つかりません) や 500 (内部サーバエラー) を返した場合、失敗となり、エラー処理がトリガされます。

[General (全般)] > [Response (応答)] > [Response Validator (応答検証)] を設定して、有効な HTTP 応答コードのセットを変更できます。

  • None (なし): 検証は行われません。

  • Success Status Code Validator (成功状況コード検証):この要素内に定義されているすべての状況コードは有効とみなされます。その他の状況コードの場合、要求はエラーをスローします。

  • Failure Status Code Validator (失敗状況コード検証): この要素内に定義されているすべての状況コードは無効とみなされ、エラーがスローされます。その他の状況コードの場合、要求は有効とみなされます。

成功応答として受け入れ可能な状況コードを設定するには、[General (全般)] > [Response (応答)] > [Response Validator (応答検証)] で、[Success Status Code Validator (成功状況コード検証)] を選択します。[Values (値)] に、受け入れ可能な状況コードのカンマ区切りリストを入力します。例: 200,201。HTTP 応答の状況コードがそれ以外の場合、失敗となり、エラーが発生します。

失敗状況コードの範囲は、2 つの ASCII ピリオド文字 (..) で定義されます。500 ~ 599 の値は失敗とみなされ、エラーが発生します。HTTP 応答の状況コードがそれ以外の場合、成功とみなされます。

対象の設定

デフォルトでは、要求の本文は受信 Mule メッセージの [payload] から取得され、応答は出力 Mule メッセージの [payload] として次へ送信されます。このデフォルトの動作は、[General (全般)] > Request (要求) > Body (本文) および [General (全般)] > [Output (出力)] > [Target Variable (対象変数)] 属性で変更できます。この属性を使用して、出力データの場所をペイロード以外 (変数など) に指定できます。

要求ストリーミングの設定

デフォルトでは、ペイロードの種別がストリームの場合、ストリーミングを使用して要求が送信されます。このデフォルトの動作を変更できます。[General (全般)] > [Request (要求)] > [Request Streaming (要求ストリーミング)] で次のいずれかの値を選択します。

  • AUTO (自動) (デフォルト): 動作はペイロード種別に応じて異なります。ストリーミングは、ペイロードが InputStream の場合は有効になり、それ以外の場合は無効になります。

  • ALWAYS (常時): ペイロード種別に関係なく常にストリーミングが有効になります。

  • NEVER (なし): ペイロードがストリームの場合も含め、ストリーミングしません。

ストリーミングの場合、要求には Content-Length ヘッダーが含まれません。含まれるのは Transfer-Encoding ヘッダーで、本文はストリーミングが完全にコンシュームされるまでチャンクで送信されます。

応答ストリーミングの設定

大きなペイロードを要求する場合、HTTP 要求設定で streamResponse 属性を設定することで、応答をストリーミングするように選択できます。

デフォルトでは、streamResponse 属性は false に設定されています。この属性を true に設定すると、Mule がチャンクをメモリ内バッファに保存して、応答をストリームとして処理できるようになります。バッファサイズは responseBufferSize 属性を使用して設定できますが、デフォルトサイズは 10 KB です。

<http:request-config name="requestConfig">
    <http:request-connection host="localhost" port="8081" streamResponse="true" responseBufferSize="1024"/>
</http:request-config>

問題を回避するには、ストリーミング時に応答をコンシュームすることが重要です。

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub