HTTP メッセージ・フローを使用して Web サービスや RESTful サービスを含む HTTP アプリケーションと対話する場合には、この情報をお読みください。
この情報は、Web サービスのシナリオ セクションと共に読むと便利です。
HTTP ノードが使用するリスナーを決める必要があります。
各リスナーの長所に関する説明は、
HTTP リスナーを参照してください。
ProxyConnectHeaders は、HTTPS (SSL) 接続でのみ使用できます。
これらのヘッダーは、HTTP 接続では使用できません。
- HTTPS でのセキュア接続の使用
- HTTPS 接続のセットアップ方法について詳しくは、SSL 認証のインプリメントを参照してください。
- HTTP 非同期要求/応答の使用
- HTTP 要求の送出と応答の受信を非同期に行うには、メッセージ・フローで HTTPAsyncRequest ノードと HTTPAsyncResponse ノードを使用します。 HTTPAsyncRequest ノードは、応答を待たずに次のメッセージを処理します。応答は、別のスレッドの新規トランザクションで HTTPAsyncResponse ノードが受け取ります。 したがって、より少ないスレッドを使用してより多くの要求を処理できます。
詳しくは、HTTP 非同期要求/応答の使用を参照してください。
- 返信用の HTTP 状況コードの設定
- デフォルトの HTTP 状況コードは 200 であり、正常を示しています。
異なる状況コードが戻されるようにするには、以下のいずれかのアクションを実行します。
- ローカル環境ツリーのフィールド Destination.HTTP.ReplyStatusCode (相関名 OutputLocalEnvironment) で状況コードを設定する。
このフィールドにより、HTTPResponseHeader ヘッダーで設定された状況コードがオーバーライドされます。 最大の柔軟性が得られるので、このアクションが好ましいオプションと言えます。
- HTTPReplyHeader ヘッダーのフィールド X-Original-HTTP-Status-Code で状況コードを設定する。
- HTTPResponseHeader ヘッダーのフィールド X-Original-HTTP-Status-Code で状況コードを設定する。 フローで HTTPRequest ノードを HTTPReply ノードの前に含める場合には、このオプションが役立ちます。HTTPResponseHeader ヘッダーが作成されるためです。 このシナリオでは、HTTPResponseHeader ヘッダーが論理ツリーに作成されており、別の Web サービスからの応答にある HTTP ヘッダーを表します。 HTTPReply ノード上で「返信または応答からデフォルト HTTP ヘッダーを生成」プロパティーを選択した場合、応答メッセージが作成される際の応答ヘッダーの値がデフォルト値として設定されます。
- LocalEnvironment.Destination.HTTP.RequestIdentifier の使用
- HTTPInput ノードが入力要求メッセージを受け取る場合、
ローカル環境フィールドの Destination.HTTP.RequestIdentifier を、
要求を送った Web サービス・クライアントを識別する固有値に設定します。 適切な場合、この値を参照して、他の場所にその値を保管することができます。
例えば、(ブローカーによる既存の Web サービスの呼び出し に示されているように) 既存の WebSphere MQ アプリケーションと
対話するメッセージ・フローのペアを設計する場合、ID 値を要求フローに保管し、応答フローで復元することにより、その応答を適切なクライアントが受け取ることを保証できます。 この手法を使用する場合、データを変更してはならず、データを BLOB として保存する必要があります。
HTTPReply ノードは、ローカル環境ツリーから ID 値を抽出し、特定のクライアントに送られるように、返信をセットアップします。 しかし HTTPInput ノードのないフローで HTTPReply ノードを使用し、このフィールドが削除されたか、正しく設定されていない場合には、メッセージ BIP3143S が出されます。
HTTPInput ノードと HTTPReply ノードの両方が含まれているメッセージ・フローを設計する場合、
ID 値は HTTPInput ノードによってローカル環境内に設定されますが、HTTPReply ノードはそれを使用しません。 したがって、メッセージ・フローが同じフローに両方の HTTP ノードおよび Compute ノードを含んでいる場合、メッセージ・ツリーのどのコンポーネントが Compute ノード (「Compute モード」プロパティー) によって入力メッセージから出力メッセージにコピーされるかを指定するとき、ローカル環境ツリーを含む必要はありません。
- HTTP 要求の URL の動的設定
- HTTPRequest または HTTPAsyncRequest ノードでプロパティー「デフォルト Web サービス URL」を設定して、Web サービス要求用の宛先 URL を決定できます。 値セットをプロパティーにオーバーライドするために、メッセージ・フロー内の HTTPRequest またはHTTPAsyncRequest ノードの前に、
Compute ノードを構成することができます。
LocalEnvironment.Destination.HTTP.RequestURL に URL ストリングを保管する ESQL をコーディングします。ノードは URL ストリングを検索して、ノード・プロパティー値の代わりに使用します。
Compute ノードにある要求メッセージ (他のすべての設定値をオーバーライドする) の HTTPRequestHeader ヘッダー・セクションにある特定のヘッダー X-Original-HTTP-URL で要求 URL も設定することができますが、柔軟性を高めるにはローカル環境ツリーの内容をこのために使用してください。
- HTTPReply ノードのための「返信または応答からデフォルト HTTP ヘッダーを生成」の設定
- HTTPReply ノードのプロパティーで「返信または応答からデフォルト HTTP ヘッダーを生成」を選択する場合、ノードには Web サービス・クライアントに送られる応答のヘッダーの最小セットが含まれています。
ヘッダーを明示的に設定するには、HTTPReplyHeader ヘッダー内に作成します。
例えば、
Compute ノードが XMLNSC ドメイン内でメッセージを伝搬し、Content-Type を変更する場合、以下のようにします。
CALL CopyMessageHeaders();
SET OutputRoot.HTTPReplyHeader."Content-Type" = 'text/xml';
SET OutputRoot.XMLNSC = InputRoot.XMLNSC;
MIME ドメインで作業しているのでない限り、ContentType プロパティーを使用して Content-Type を設定しないでください。
ContentType プロパティーは、MIME 内で使用される Content-Type の値を設定することを意図しています。
返信で使用される HTTP ヘッダーの完全セットは、以下のステップで定義されるアルゴリズムを使用してヘッダーを選択することで構築されます。
- HTTPReplyHeader ヘッダー内の 1 つ以上のヘッダーを選択します。
- Content-Type ヘッダーが未定義の場合、ContentType プロパティーの空でない値を使用して作成します。
- HTTPResponseHeader ヘッダー内の 1 つ以上のヘッダーを選択します (HTTPResponseHeader ヘッダーは HTTPRequest ノードからの戻りで伝搬したものです)。
- Content-Type ヘッダーが未定義の場合、デフォルト値 text/xml; charset=ccsid of the message
body を使用して作成します。
- Content-Length ヘッダーを作成または上書きします。
重要: HTTPReply ノードは、「返信または応答からデフォルト HTTP ヘッダーを生成」のチェックをクリアにした場合でも、常に Content-Length ヘッダーを再書き込みします。 このアクションによって、内容が正しいことが確認されます。
HTTPReplyHeader ヘッダー・セクションが、HTTPReply ノードによって受け取られるメッセージ内に存在し、HTTPReply ノードの Output ターミナルが接続されている場合、HTTPReplyHeader ヘッダー・セクションはすべての変更された値または追加された値で更新されます。
- HTTPRequest または HTTPAsyncRequest ノードのための「入力からデフォルト HTTP ヘッダーを生成」の設定
- HTTPRequest または HTTPAsyncRequest ノードのプロパティーで「入力からデフォルト HTTP ヘッダーを生成」を選択する場合、ノードにはサーバーに送られる要求のヘッダーの最小セットが含まれています。
ヘッダーを明示的に設定するには、HTTPRequestHeader ヘッダー内に作成します。例えば、XMLNSC ドメイン内でメッセージを伝搬する
Compute ノードが Content-Type を変更する場合、以下のようにします。
CALL CopyMessageHeaders();
SET OutputRoot.HTTPRequestHeader."Content-Type" = 'text/xml';
SET OutputRoot.XMLNSC = InputRoot.XMLNSC;
MIME ドメインで作業しているのでない限り、ContentType プロパティーを使用して Content-Type を設定しないでください。
ContentType プロパティーは、MIME 内で使用される Content-Type の値を設定することを意図しています。
要求で使用される HTTP ヘッダーの完全セットは、以下のステップで定義されるアルゴリズムを使用してヘッダーを選択することで構築されます。
- 要求 URL か、着信するメッセージの HTTPRequestHeader ヘッダー・セクションのどちらかを基にして、Host ヘッダーを設定します。
- HTTPRequestHeader ヘッダー内の 1 つ以上のヘッダーを選択します。
- Content-Type ヘッダーが未定義の場合、ContentType プロパティーの空でない値を使用して作成します。
- HTTPInputHeader ヘッダーから 1 つ以上のヘッダーを選択します (HTTPInputHeader ヘッダーは HTTPInput ノードによって自動的に作成されます)。
- Content-Type ヘッダーが未定義の場合、デフォルト値 text/xml; charset=ccsid of the message body を使用して作成します。
- SOAPAction ヘッダーが未定義の場合、デフォルト値 '' を使用して作成します。
- Content-Length ヘッダーを作成または上書きします。
重要: HTTPRequestまたは HTTPAsyncRequest ノードは、「入力または要求からデフォルト HTTP ヘッダーを生成」のチェックをクリアにした場合でも、常に Content-Length ヘッダーを再書き込みします。 このアクションによって、内容が正しいことが確認されます。
受け取ったメッセージに HTTPRequestHeader ヘッダーが存在する場合、HTTPRequestHeader ヘッダーはすべての変更された値または追加された値で更新されます。