Cosminexus V9 BPM/ESB基盤 サービスプラットフォーム 解説

[目次][用語][索引][前へ][次へ]

2.14.3 HTTPリクエストと要求電文の関係

ここでは,HTTPアダプタの要求電文からHTTPリクエストへの変換の仕組みについて説明します。

ビジネスプロセスから渡された要求電文は,HTTPアダプタで次のように分割してHTTPリクエストに変換されます。

HTTPリクエストの設定方法および各項目の詳細について説明します。

なお,ここで説明する電文の例では,名前空間接頭辞を省略しています。

<この項の構成>
(1) HTTPリクエストの設定方法
(2) リクエストライン
(3) HTTPリクエストヘッダ
(4) HTTPリクエストボディ

(1) HTTPリクエストの設定方法

(a) 設定個所

HTTPリクエストは,HTTPリクエストの構成要素ごとに,次の場所で設定します。

●リクエストライン
  • 要求電文(ヘッダ)
  • HTTPアダプタ実行環境プロパティファイル
  • HTTPアダプタ実行環境共通プロパティファイル

●リクエストヘッダ
  • 要求電文(ヘッダ)
  • HTTPアダプタ実行環境プロパティファイル
  • HTTPアダプタ実行環境共通プロパティファイル

●リクエストボディ
  • 要求電文(ボディ)
  • 作業フォルダ・共通フォルダ内のファイル
注※
共通フォルダの場合,配下のサブフォルダを使用できます。

リクエストラインとリクエストヘッダは,上記3つの設定場所の中から任意の場所(単一の場所でも複数の場所の組み合わせでも可能)を使用して設定します。リクエストボディは要求電文(ボディ),または作業フォルダ・共通フォルダ内のファイルを使用して設定します。

図2-113 HTTPリクエストの設定例

[図データ]

(b) リクエストライン,リクエストヘッダの設定方法

リクエストラインとリクエストヘッダは,要求電文(ヘッダ),HTTPアダプタ実行環境プロパティファイル,HTTPアダプタ実行環境共通プロパティファイルの3つの場所で設定します。複数の場所に設定がある場合は,HTTPアダプタは優先度が高い設定を使用して処理をします。

それぞれの設定場所の優先度は次のとおりです。

表2-47 リクエストラインとリクエストヘッダの設定場所と優先度

優先度 設定場所
優先度1 要求電文(ヘッダ)
| 優先度2 HTTPアダプタ実行環境プロパティファイル
優先度3 HTTPアダプタ実行環境共通プロパティファイル

HTTPリクエストの設定は,要求電文(ヘッダ)や各プロパティファイルの中のパラメタ(要求電文(ヘッダ)の各要素やプロパティファイルの個々のプロパティ)単位で有効になります。

それぞれの設定場所には,次のような特長があります。システムの要件に合わせてこれらを適切に組み合わせることで,開発工数の削減や運用の容易化を図れます。

表2-48 リクエストラインとリクエストヘッダの設定場所と特長

設定場所 特長
要求電文(ヘッダ) HTTPアダプタの実行時に設定できるため,リクエストごとに動的に値を変更する必要があるパラメタの定義に適しています。
(例)リクエストメソッドやURIの指定,など
HTTPアダプタ実行環境プロパティファイル HTTPアダプタの1定義ごとに固定のパラメタを設定することができるため,アダプタ開発時(または運用時)に静的に決まるパラメタの設定に適しています。
(例)ファイル受信(ダウンロード)時の出力先フォルダの指定,など
HTTPアダプタ実行環境共通プロパティファイル すべてのHTTPアダプタに共通のパラメタを設定することができるため,システム共通の静的なパラメタの設定に適しています。
(例)認証情報やログファイルの出力先の指定,など

設定例
具体的な使用例を用いて,HTTPリクエストの設定方法を示します。
  • パターン1(常に固定のHTTPリクエストを発行する場合)
    HTTPアダプタから常に固定のHTTPリクエストを発行する場合,最も簡単な設定方法は,実行環境プロパティファイルによるリクエストの設定です。この方法では,HTTPアダプタは自分のサービスIDと同じ名前の実行環境プロパティファイルをアダプタ起動時に読み込み,リクエスト発行の要求があるたびに,実行環境プロパティファイルの内容に基づいてHTTPリクエストを発行します。

    図2-114 HTTPリクエストの設定例(常に固定のHTTPリクエストを発行する場合)

    [図データ]

  • パターン2(複数のHTTPアダプタの間で一部の設定を共有する場合)
    複数のHTTPアダプタの間で一部の設定をシステム共通のパラメタとして共有する場合は,実行環境共通プロパティファイルにシステム共通のパラメタを切り出して設定することが有効です。次の図では,アダプタ1およびアダプタ2に共通のパラメタとしてサービス1に対するWWW認証の認証情報があり,これを実行環境共通プロパティファイルで定義しています。

    図2-115 HTTPリクエストの設定例(複数のHTTPアダプタの間で一部の設定を共有する場合)

    [図データ]

    このような設定方法にすることで,共有するパラメタを重複して定義する必要がなくなるため,開発工数を削減できます。また,共通のパラメタが1つのプロパティファイルで一元管理されるため,設定の確認や変更作業(本例ではサービス1の認証情報の更新に伴うHTTPアダプタの設定変更作業)が容易になります。
  • パターン3(HTTPリクエストの内容を動的に設定する場合)
    HTTPリクエストの内容をリクエスト発行時に動的に設定する必要がある場合(ビジネスプロセスの処理状態に応じてリクエストの内容を変更する場合)は,要求電文(ヘッダ)を利用してHTTPリクエストを設定します。次の図では,ビジネスプロセスからアダプタ2に渡す要求電文(ヘッダ)の中にクエリ情報を定義し,HTTPリクエスト発行時にリクエストラインのクエリ情報が動的に生成されるようにしています。
    このようなアダプタ実行時にHTTPリクエストの内容を動的に変更する設定は,要求電文(ヘッダ)を使用した場合だけです。

    図2-116 HTTPリクエストの設定例(HTTPリクエストの内容を動的に設定する場合)

    [図データ]

    参考
    優先度が低い設定場所で定義したパラメタは,優先度が高い設定場所で定義したパラメタで値を置き換える(上書きする)ことができます。例えば上記の図では,実行環境共通プロパティファイルを使用してすべてのアダプタのログ出力先を”E:\log”に設定していますが,アダプタ3だけアダプタ固有の実行環境プロパティファイルを使用して,ログ出力先を”F:\log”に変更しています。一部のHTTPアダプタだけ例外的な設定が必要な場合や,一時的に特定のHTTPアダプタだけ動作を変更したいなどの場合には,このような設定方法も使用できます。

具体的な設定項目や設定方法
リクエストラインやリクエストヘッダの具体的な設定項目や設定方法については,「(2) リクエストライン」,および「(3) HTTPリクエストヘッダ」を参照してください。
要求電文(ヘッダ)で設定できる要素の詳細については,マニュアル「サービスプラットフォーム 開発ガイド 受付・アダプタ定義編」の「3.3.13 HTTPアダプタを定義する」を参照してください。
HTTPアダプタ実行環境プロパティファイル,およびHTTPアダプタ実行環境共通プロパティファイルで設定できるプロパティの詳細については,マニュアル「サービスプラットフォーム リファレンス」の「HTTPアダプタ実行環境プロパティファイル」を参照してください。
要求電文(ヘッダ)とHTTPアダプタ実行環境(共通)プロパティファイルのパラメタの対応関係については,「2.14.12 要求電文(ヘッダ)とHTTPアダプタ実行環境(共通)プロパティファイルのパラメタの対応関係」を参照してください。

注意事項
  • 実行環境(共通)プロパティファイルについて
    HTTPアダプタの起動時に実行環境プロパティファイルやHTTPアダプタ実行環境共通プロパティファイルが所定の場所に配備されていない場合は,HTTPアダプタはそのプロパティファイルを使用しないものとして動作します。
    実行環境プロパティファイルと実行環境共通プロパティファイルの両方が配備されていない場合は,HTTPアダプタはこれらのプロパティファイルに対してすべてデフォルト値が指定されたものと仮定して動作します。デフォルト値がないプロパティは未定義状態になるため,必要に応じて,アダプタ実行時に要求電文(ヘッダ)でリクエストの設定を行うようにしてください。
  • 要求電文(ヘッダ)について
    HTTPアダプタの開発時に要求電文用のヘッダ割当変数の指定を省略した場合は,HTTPアダプタは要求電文(ヘッダ)を使用しないものとして動作します。
    HTTPアダプタの開発時に要求電文用のヘッダ割当変数を複数指定した場合は,HTTPアダプタの要求電文(ヘッダ)の名前空間を持つヘッダ割当変数が使用されます。
    HTTPアダプタの開発時にHTTPアダプタの要求電文(ヘッダ)の名前空間を持つヘッダ割当変数を複数指定した場合は,実行時にどのヘッダ割当変数が使用されるかは不定です。
  • その他全般
    複数の設定場所を使用することでシステムの開発や運用を効率化できます。しかし,必要以上に設定の階層化や複雑化をすると,実行時にどの設定場所のパラメタが使用されるか,理解することが難しくなります。最初にシステムの構成や運用業務の分析を行った上で,適切な効果が得られるように設計や開発を行ってください。
(c) リクエストボディの設定方法

リクエストボディは,リクエストボディに格納するデータと,データ送信種別(データの格納方法)のペアで指定します。それぞれ,次の場所で設定します。

●格納するデータ
要求電文(ボディ),または作業フォルダ・共通フォルダ内のファイル
注※
共通フォルダの場合,配下のサブフォルダを使用できます。

●データ送信種別
要求電文(ヘッダ)やHTTPアダプタ実行環境(共通)プロパティファイル

データ送信種別に応じて,要求電文(ボディ),または作業フォルダ・共通フォルダ内のファイルが適切な形に変換された上でリクエストボディに格納され,リクエストとして発行されます。リクエストボディを発行する際の設定イメージを次に示します。

[図データ]

具体的な設定項目や設定方法については,「(4) HTTPリクエストボディ」を参照してください。

要求電文(ボディ)で設定できる要素の詳細については,マニュアル「サービスプラットフォーム 開発ガイド 受付・アダプタ定義編」の「3.3.13 HTTPアダプタを定義する」を参照してください。

(2) リクエストライン

HTTPリクエストの先頭行に記述するリクエストラインは次の形式で送信されます。

 
HTTPメソッド△URI△プロトコル
 

(凡例)
△:半角スペースです。

注※
プロトコルは「HTTP/1.1」で固定です。

 

HTTPメソッドおよびURIの指定方法について説明します。

(a) HTTPメソッド

リクエストラインのHTTPメソッドは,要求電文(ヘッダ),HTTPアダプタ実行環境プロパティファイル,およびHTTPアダプタ実行環境共通プロパティファイルに指定します。

HTTPメソッドの指定個所を次に示します。

表2-49 HTTPメソッドの指定個所

指定方法 項目 指定個所
要求電文(ヘッダ) HTTPメソッド method要素
HTTPアダプタ実行環境プロパティファイル,HTTPアダプタ実行環境共通プロパティファイル HTTPメソッド adphttp.request.methodプロパティ
注意
次のメソッドはHTTPリクエストボディを指定できません。
  • GET
  • DELETE
  • HEAD
  • OPTIONS
これらのメソッドを使用するときは,必ずデータ種別を「データなし」にしてください。HTTPリクエストボディのデータ種別については,「(4)(a) データ種別」を参照してください。

要求電文(ヘッダ),HTTPアダプタ実行環境プロパティファイル,およびHTTPアダプタ実行環境共通プロパティファイルのどれにもHTTPメソッドが指定されなかった場合はエラーになります。

(b) URI

リクエストラインのURIは,スキーム・オーソリティ部分,パス部分,クエリ部分に分割して,要求電文(ヘッダ),HTTPアダプタ実行環境プロパティファイル,およびHTTPアダプタ実行環境共通プロパティファイルに指定します。

URIの指定個所を次に示します。

表2-50 URIの指定個所

指定方法 項目 指定個所
要求電文(ヘッダ) スキーム・オーソリティ uri-scheme-authority要素
パス uri-path要素
クエリ uri-query要素
HTTPアダプタ実行環境プロパティファイル,HTTPアダプタ実行環境共通プロパティファイル スキーム・オーソリティ adphttp.request.uri-scheme-authorityプロパティ
パス adphttp.request.uri-pathプロパティ
クエリ adphttp.request.uri-query.<追番>プロパティ

要求電文(ヘッダ),HTTPアダプタ実行環境プロパティファイル,およびHTTPアダプタ実行環境共通プロパティファイルのどれにもスキーム・オーソリティとパスが指定されなかった場合はエラーになります。

スキーム・オーソリティのスキーム部分に「https」を指定した場合,HTTPSを使用して通信します。ただし,HTTPSを使用するには設定が必要です。詳細は,マニュアル「サービスプラットフォーム 開発ガイド 受付・アダプタ定義編」の「付録I HTTPアダプタで必要なセキュリティの設定」を参照してください。

URIの指定例を次に示します。どちらの場合も生成されるURIは「http://localhost:80/test/selectdata?name=sample&id=001」です。

 

参考
スキーム・オーソリティ部分,パス部分,クエリ部分は独立して指定できます。このため,スキーム・オーソリティ部分をHTTPアダプタ実行環境プロパティファイルに指定して,パス部分とクエリ部分を要求電文(ヘッダ)で指定することで,HTTPリクエストの宛先を動的に変更することもできます。
注意
スキーム・オーソリティ部分とパス部分とクエリ部分には,それぞれに適切な値を設定してください。パス部分にスキーム・オーソリティやクエリを指定した場合など,不適切な値を指定した場合は動作を保証しません。
(c) クエリ

URIのクエリ部分は,要求電文(ヘッダ)に内包されるクエリ用詳細電文フォーマットをカスタマイズして指定できます。

クエリの指定例を次に示します。

 

注意
  • uri-query要素直下に指定した値だけ有効になり,属性を指定しても無視されます。
  • 階層構造を持つ要素を指定した場合,その要素が生成するクエリの値については保証しません。
  • 同一のキー名を複数定義した場合の出現順は保証しません。
  • 「http://user:password@example.jp:80/httprcp1/op1」のように,URIにベーシック認証のアカウント情報が含まれていても,ベーシック認証情報として使用されません。
  • 要求電文(ヘッダ)でクエリを指定する場合,クエリのキー名称にはNCNameとして不正な文字を使用できません。

(3) HTTPリクエストヘッダ

HTTPリクエストヘッダは,要求電文(ヘッダ)のhttp-header要素(any型),およびHTTPアダプタ実行環境プロパティファイル(またはHTTPアダプタ実行環境共通プロパティファイル)のadphttp.request.header.userdef.<追番>プロパティによって任意の拡張ヘッダを指定できます。

要素名はローカル名の部分だけ使用するため,任意の名前空間を指定できます。

要求電文(ヘッダ)とHTTPアダプタ実行環境プロパティファイル(またはHTTPアダプタ実行環境共通プロパティファイル)で別々のヘッダを指定した場合,要求電文(ヘッダ)の指定だけが有効になります。HTTPアダプタ実行環境プロパティファイルで指定したヘッダが要求電文(ヘッダ)の指定に追加されることはありません。

(a) HTTPヘッダの指定例

HTTPヘッダの指定例を次に示します。

(b) 特殊なHTTPヘッダの指定

次に示すHTTPヘッダは,要求電文(ヘッダ)のhttp-header要素,およびHTTPアダプタ実行環境プロパティファイル(またはHTTPアダプタ実行環境共通プロパティファイル)のadphttp.request.header.userdef.<追番>プロパティに指定しても無視されます。

表2-51 特殊なHTTPヘッダの指定方法

ヘッダフィールド名 説明
Content-Type 次の個所で指定します。
  • 要求電文(ヘッダ)
    http-header-Content-Type要素
  • HTTPアダプタ実行環境プロパティファイル,HTTPアダプタ実行環境(共通)プロパティファイル
    adphttp.request.header.content-typeプロパティ,adphttp.request.header.content-type.charsetプロパティ
Cookie 次の個所で指定します。
  • 要求電文(ヘッダ)
    Cookies要素
詳細は,「2.14.5 HTTPアダプタを使用したCookie情報の引き継ぎ」を参照してください。
Proxy-Authorization プロキシサーバへの接続に使用するProxy-AuthorizationヘッダはJavaVMのシステムプロパティで設定します。
詳細は,「2.14.6 プロキシサーバを経由した通信」を参照してください。
Connection Connection: Keep-Aliveなど,コネクション制御に関するヘッダはJavaVMのシステムプロパティで設定します。詳細は,「2.14.7 コネクション継続(Keep-Alive)を使用した通信」を参照してください。
Content-Length HTTPアダプタが自動的に設定します。
Accept-Encoding HTTPアダプタが自動的に設定します。
Authorization 次の個所で指定します。
  • 要求電文(ヘッダ)
    http-header-Authorization要素
  • HTTPアダプタ実行環境プロパティファイル,HTTPアダプタ実行環境(共通)プロパティファイル
    adphttp.request.header.authorizationプロパティ,adphttp.request.header.authorization.typeプロパティ
詳細は,「2.14.14 WWW認証を使用したセキュアな接続」を参照してください。
(c) 注意事項

HTTPヘッダ指定時の注意事項を次に示します。

(4) HTTPリクエストボディ

(a) データ種別

HTTPリクエストボディで送信するデータ種別は次の中から選択できます。

HTTPリクエストボディのデータ種別は,要求電文(ヘッダ)のbinding要素,およびHTTPアダプタ実行環境プロパティファイル(またはHTTPアダプタ実行環境共通プロパティファイル)のadphttp.request.part.message.bindingプロパティで指定できます。

ただし,要求電文(ヘッダ)にfiles要素が存在する場合は,上記の要素(またはプロパティ)が指定されていてもファイルデータとして扱われます。同様に,HTTPアダプタ実行環境プロパティファイル(またはHTTPアダプタ実行環境共通プロパティファイル)のadphttp.request.part.file.<追番>.input-folder-nameプロパティが存在する場合は,adphttp.request.part.message.bindingプロパティが指定されていてもファイルデータとして扱われます。

(b) フォームデータ(ノーマルモード)

ノーマルモードでフォームデータを送信する場合,サービスプラットフォームが提供するフォームデータ用電文フォーマットをカスタマイズして指定します。

フォームデータの指定例を次に示します。

指定したフォームデータはURLエンコードされます。デフォルトの文字コードはUTF-8です。

注意
  • http-body-formdata要素に指定した値は,http-body-formdata要素直下の値だけ有効になり,属性を指定しても無視されます。
  • http-body-formdata要素に階層構造を持つ要素を指定した場合,その要素が生成するフォームデータの値については保証しません。
  • HTTPアダプタではフォームデータの出現順を保証しません。フォームデータの出現順は要求電文(ボディ)の指定順と必ずしも一致するとは限りません。
  • http-body-formdata要素に指定した値はContent-Typeヘッダのcharset属性に指定した文字コードでURLエンコードされます。このため,必ずURLエンコードをする前の形式で指定してください。
  • http-body-formdata要素でフォームデータを指定する場合,フォームデータのキー名称にはNCNameとして不正な文字を使用できません。
(c) 要求電文(ボディ)(パススルーモード)

パススルーモードで要求電文(ボディ)で指定したデータをそのままHTTPリクエストボディに設定する場合,送信するHTTPリクエストボディの形式に合わせて要求電文(ボディ)の電文フォーマットを作成します。

(d) ファイルデータ

HTTPアダプタでは,作業フォルダまたは共通フォルダ内のファイルを対象のサーバに送信できます。

作業フォルダとは,HTTP受付またはFTP受付がリクエストごとにHCSCサーバ内に作成する一時フォルダです。作業フォルダは,作成した受付から呼び出されたビジネスプロセス以外からは参照できません。

共通フォルダとは,システム構築時にユーザが作成する任意のフォルダです。複数のビジネスプロセスで共通して利用するファイルを格納することができます。また,共通フォルダの場合,配下のサブフォルダを使用できます。

ファイルデータを送信する場合,要求電文(ヘッダ),およびHTTPアダプタ実行環境プロパティファイル(またはHTTPアダプタ実行環境共通プロパティファイル)でファイルデータに関する情報を指定します。プロパティファイルで指定する場合は共通フォルダだけ使用できます。

ファイルデータの指定個所を次に示します。

表2-52 ファイルデータの指定方法

指定方法 項目 指定個所
要求電文(ヘッダ) 作業フォルダのリクエストID request-id要素
使用するフォルダ input-folder-name要素のcommon属性
共通フォルダ定義名 input-folder-name要素
送信対象のファイル名 local-file-name要素
送信データのContent-Typeヘッダフィールドのメディアタイプ http-header-Content-Type要素
送信データのContent-Typeヘッダフィールドのcharset属性値 http-header-Content-Type要素のcharset属性
HTTPアダプタ実行環境プロパティファイル,HTTPアダプタ実行環境共通プロパティファイル 作業フォルダのリクエストID
使用するフォルダ
共通フォルダ定義名 adphttp.request.part.file.<追番>.input-folder-name
送信対象のファイル名 adphttp.request.part.file.<追番>.local-file-name
送信データのContent-Typeヘッダフィールドのメディアタイプ adphttp.request.header.content-type
送信データのContent-Typeヘッダフィールドのcharset属性値 adphttp.request.header.content-type.charset

(凡例)
−:該当する指定個所はありません。

注※
サブフォルダを使用する場合,共通フォルダルートからファイル名までの相対パスを指定してください。

HTTPアダプタを利用したファイル送信の例を次に示します。

図2-117 HTTPアダプタを利用したファイル送信の例(共通フォルダを使用する場合)

[図データ]

ファイルデータを送信する場合,HTTPアダプタに渡された要求電文(ボディ)の値は無視されます。このため,指定する要求電文(ボディ)の電文フォーマットには,空のボディデータを格納するためのファイルデータ用電文フォーマットを使用します。

注意
  • 要求電文(ヘッダ)でfiles要素だけ指定して下位のfile要素を1つも指定しなかった場合,HTTPリクエストボディが空の状態でHTTPリクエストが送信されます。
  • file要素を複数指定した場合,最初に出現した要素の値が使用されます。
  • ファイルデータを送信する場合,読み込み対象のファイルが格納されたフォルダまたはファイルの指定がない場合や,指定されたフォルダおよびファイルが存在しない場合はエラーとなります。

次に,共通フォルダのサブフォルダを使用して,HTTPリクエストでファイルを送信する場合の指定例を示します。

HTTPアダプタ要求電文(ヘッダ)の/http-header-request/http-part/files/file/local-file-name,またはHTTPアダプタ実行環境プロパティファイルのadphttp.request.part.file.<追番>.local-file-nameに共通フォルダルートからファイル名までの相対パスを指定します。