3.11.4 HTTP受付ルーティング定義ファイル
(1) 形式
(2) 機能
HTTP受付のマッチングの条件や,実行するプロパティ値をXML形式で設定します。
HTTP受付ルーティング定義ファイルが読み込まれるようにするには,HTTP受付定義ファイルでhttprecp.use-routing-definitionプロパティにtrueを指定する必要があります。
この定義ファイルはHTTP受付の起動時に読み込まれます。読み込み時にエラーが発生すると,HTTP受付の起動に失敗します。
HTTP受付のルーティング機能については,マニュアル「サービスプラットフォーム 解説」の「2.15.12 HTTP受付のルーティング機能」を参照してください。
(3) ファイルの格納先
<サービスプラットフォームのインストールディレクトリ>\CSC\custom-reception\http\config\templates\cscurecphttp_routing.xml
- 注意事項
-
ここに格納されているファイルはテンプレートファイルです。HTTP受付ルーティング定義ファイルを編集する場合は,ユーザ定義受付(呼出先選択)であるHTTP受付の追加時にユーザ定義受付定義画面(詳細)で[独自定義ファイル]の[編集]ボタンをクリックし,定義ファイルの内容を修正してください。
(4) 設定できる要素
<?xml version="1.0" encoding="UTF-8"?>
このファイルがXMLファイルであることを示すXML宣言です。
<urecphttp-routing>
HTTP受付ルーティング定義のルート要素です。
<path pattern="URLパターン" [server="ホスト名"]>
path要素です。path要素は複数定義することもできます。
path要素ごとに次に示す属性を設定します。
-
pattern="URLパターン"
pattern属性には,URLパターンとしてURLとのマッチング規則を設定します。pattern属性は必ず指定してください。
リクエストURLの中で,コンテキストルート(HTTP受付定義ファイルで指定)より後ろの部分をURLパターンとして指定します。
リクエストURLの形式を次に示します。URLパターンには「<URLセグメント>/…」以降を指定します。
http[s]://<ホスト名>:<ポート番号>/<コンテキストルート>/<URLセグメント>/…
URLパターンの詳細な仕様を次に示します。
url-pattern= strict-url-pattern | flex-url-pattern strict-url-pattern= '/' url-segment | strict-url-pattern '/' url-segment flex-url-pattern= strict-url-pattern '/' flex-segment url-segment= segment | dynamic-segment dynamic-segment= '{' path-variable-name '}' flex-segment= '{*' path-variable-name '}' path-variable-name= Namespaces in XML 1.0 (Third Edition)で規定するNCName※ segment= RFC 3986 - Uniform Resource Identifier (URI): Generic Syntaxで規定されるsegment注※ NCNameで使用できる文字のうち「:」(コロン)は使用できません。
次に,URLパターンの記述について説明します。
- URLパターンの記述規則
-
URLパターンは「/」で始まり,URLセグメント(「/」で区切られた部分)で構成します。
URLセグメントには,RFC 3986 - Uniform Resource Identifier (URI): Generic Syntaxで規定されるsegmentに加え,ワイルドカードとして使用できるURLセグメント(動的セグメント)が設定できます。動的セグメントを指定していないURLパターンの場合,コンテキストルート部分を除いたリクエストURLと完全一致する場合だけ,マッチしたと判定されます。
URLパターンの記述規則に合致しないpattern属性が指定された場合は,KDEC80463-Eメッセージを出力して,HTTP受付の開始に失敗します。
pattern属性で指定されていないURLパターンを使用してリクエストが実行された場合,エラーメッセージ(KDEC80464-E)を出力して,HTTPステータスコード(404)をリクエスタに返します。
定義ファイル内に複数定義されたURLパターンは,先に定義されたURLパターンの内容が優先されます。マッチング順序については,「(6) マッチング順序」を参照してください。
- 動的セグメントの指定方法
-
動的セグメントは「{」「}」で囲み,可変値(URLパラメタ名)を設定します。これによって,リクエストURL内の対応するセグメントにマッチします。
また,URLパターンの末尾には,リクエストURL内の対応するセグメント以降全体がマッチする動的セグメントを指定できます。この動的セグメントは,URLパラメタ名を「{*」「}」で囲んで指定します。
なお,URLパターン内でURLパラメタ名が重複していると,HTTP受付の開始に失敗します。
動的セグメントを設定した場合の抽出結果については,「(5) 動的セグメントを指定した場合の抽出結果」を参照してください。
- 動的セグメントを使用したURLパターンのマッチングの判定
-
URLパターンの動的セグメントの設定値の例と,リクエストURLにマッチするかを次に示します。
URLパターンの設定値
コンテキストルート部分を除いたリクエストURL
マッチするか
/books/{bookid}/page/{pageno}
/books/1/page/
〇
/books/1/page/2
〇
/books/1/page/2/
×
/books/1/page/2/images
×
/books/{bookid}/page/{*extraparam}
/books/1/page/
〇
/books/1/page/2
/books/1/page/2/
/books/1/page/2/images
/books/{*bookid}/page/{pageno}
({*bookid}がURLパターンの末尾でないため,リクエストURLに関係なく,HTTP受付の起動時にエラー)
−
- (凡例)
-
○:リクエストURLにマッチします。
×:リクエストURLにマッチしません。
−:マッチング処理は実行されません。
-
server="ホスト名"
server属性にはホスト名を設定します。大文字と小文字は区別されません。server属性の指定は省略することもできます。
この属性が指定された場合,クライアントからのHTTPリクエストヘッダHostとのマッチングを実施します。同一のホストに複数のドメイン名を割り当て,機能を振り分けたい場合などに使用します。
この属性が指定されなかった場合,すべてのHTTPリクエストヘッダHostがマッチします。
<HTTPメソッド要素>
HTTPメソッド要素として設定できる要素を次に示します。
|
設定できる要素 |
マッチするリクエストメソッド |
|---|---|
|
<GET>…</GET> |
リクエストメソッドがGETの場合 |
|
<POST>…</POST> |
リクエストメソッドがPOSTの場合 |
|
<HEAD>…</HEAD> |
リクエストメソッドがHEADの場合 |
|
<PUT>…</PUT> |
リクエストメソッドがPUTの場合 |
|
<DELETE>…</DELETE> |
リクエストメソッドがDELETEの場合 |
|
<OPTIONS>…</OPTIONS> |
リクエストメソッドがOPTIONSの場合 |
この要素に設定されていないHTTPメソッドを使用してリクエストが実行された場合,エラーメッセージ(KDEC80464-E)を出力して,HTTPステータスコード(405)をリクエスタに返します。
HTTPメソッド要素は複数の種類を設定できますが,同じHTTPメソッド要素をpath要素内に指定すると,HTTP受付の開始に失敗します。
<invoke>
invoke要素には,HTTP受付から呼び出すビジネスプロセス名を設定します。
設定したビジネスプロセス名は,次の両方の設定値にマッチするリクエストを受信した場合に呼び出されます。
-
path要素の設定値(URLパターンとホスト名)
-
HTTPメソッド要素の設定値(HTTPメソッド)
<property>
property要素には,HTTP受付定義ファイルのプロパティと値を設定します。
次の両方の設定値にマッチするリクエストを受信した場合,HTTP受付の実行時だけプロパティ値を変更して実行できます。
-
path要素の設定値(URLパターンとホスト名)
-
HTTPメソッド要素の設定値(HTTPメソッド)
このとき,同じプロパティがHTTP受付定義ファイルに設定されていても,HTTP受付ルーティング定義ファイルのプロパティが適用されます。
HTTP受付ルーティング定義ファイルのプロパティ値と,HTTP受付定義ファイルのプロパティ値との優先順位を次に示します。
-
HTTP受付ルーティング定義ファイルに設定したプロパティの値
-
HTTP受付定義ファイルに設定したプロパティの値
-
HTTP受付定義ファイルに設定するプロパティのデフォルト値
property要素はHTTPメソッド要素内に複数定義できます。なお,同じプロパティ名を複数定義すると,HTTP受付の開始に失敗します。
- 設定形式
-
プロパティ名と値を次の形式で設定します。
<property key="プロパティ名">値</property>
- 設定できるプロパティの種類
-
設定できるプロパティの種類を次に示します。各プロパティの設定値については,「3.11.3 HTTP受付定義ファイル」を参照してください。
-
httprecp.switchover.pass-through.mode(パススルーモードまたは標準モードの指定)
-
httprecp.pass-through.parameter-use(パススルーモードのmsgキーの使用可否)
-
httprecp.request.switchover.json-transfer.mode(リクエスト処理時のJSON-XML変換の有無)
-
httprecp.response.switchover.json-transfer.mode(レスポンス処理時のJSON-XML変換の有無)
-
(5) 動的セグメントを指定した場合の抽出結果
URLパターンに動的セグメントを指定した場合,リクエストURLの対応するセグメントが抽出されます。URLパターンの末尾に「{*」「}」で囲まれた動的セグメントを指定した場合は,「/」で区切られた複数のセグメントが抽出されます。
抽出結果は,要求電文フォーマット(ヘッダ変数用)の要求ヘッダ電文の<url-parameters>要素の子要素として設定されます。HTTP受付の電文フォーマットについては,マニュアル「サービスプラットフォーム 開発ガイド 受付・アダプタ定義編」の「2.5.2 HTTP受付の電文フォーマットを作成する」を参照してください。
例として,動的セグメントを指定したURLパターンと,その抽出結果を次に示します。
|
URLパターンの設定値 |
コンテキストルート部分を除いたリクエストURL |
URLパラメタの抽出結果 |
|---|---|---|
|
/books |
/books |
なし(動的セグメントを指定していないため) |
|
/books/{bookid}/page/{pageno} |
/books/1/page/ |
<url-parameters> <bookid>1</bookid> <pageno></pageno> </url-parameters> |
|
/books/1/page/2 |
<url-parameters> <bookid>1</bookid> <pageno>2</pageno> </url-parameters> |
|
|
/books/{bookid}/page/{*extra} |
/books/1/page/ |
<url-parameters> <bookid>1</bookid> <extra></extra> </url-parameters> |
|
/books/1/page/2 |
<url-parameters> <bookid>1</bookid> <extra>2</extra> </url-parameters> |
|
|
/books/1/page/2/images |
<url-parameters> <bookid>1</bookid> <extra>2/images</extra> </url-parameters> |
(6) マッチング順序
HTTP受付ルーティング定義ファイルの中で,最初にマッチしたホスト名,URLパターンおよびHTTPメソッドが有効になります。
次の定義例のマッチング順序について説明します。
<urecphttp-routing>
<path pattern="/books/{bookid}">
<GET><invoke>BP01</invoke></GET>
</path>
<path pattern="/books/extra">
<GET><invoke>BP02</invoke></GET>
</path>
</urecphttp-routing>この場合,「/books/extra」へのGETリクエストは,定義されている2つのURLパターン「/books/{bookid}」「/books/extra」のどちらにもマッチします。「/books/{bookid}」のほうが先に定義されているので,HTTP受付はビジネスプロセス「BP01」を呼び出します。BP02は呼び出されません。
「/books/extra」へのGETリクエストでBP02を呼び出し,「/books/extra」以外の/books/xxxへのリクエストでBP01を呼び出すようにするには,次のように「/books/extra」を先に定義してください。
<urecphttp-routing>
<path pattern="/books/extra">
<GET><invoke>BP02</invoke></GET>
</path>
<path pattern="/books/{bookid}">
<GET><invoke>BP01</invoke></GET>
</path>
</urecphttp-routing>
(7) 記述例
HTTP受付ルーティング定義ファイルの記述例をXML宣言を含めて次に示します。
<?xml version="1.0" encoding="UTF-8"?>
<urecphttp-routing xmlns="http://www.hitachi.co.jp/soft/xml/cosminexus/csc/reception/http/routing"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.hitachi.co.jp/soft/xml/cosminexus/csc/reception/http/routing/urecp_http_routing_definition.xsd">
<path pattern="/api/books">
<GET>
<invoke>bp01</invoke>
<property key="httprecp.switchover.pass-through.mode">true</property>
<property key="httprecp.pass-through.parameter-use">true</property>
</GET>
<POST><invoke>bp02</invoke></POST>
</path>
<path pattern="/api/books/{book-id}">
<GET><invoke>bp03</invoke></GET>
<PUT><invoke>bp04</invoke></PUT>
<DELETE><invoke>bp05</invoke></DELETE>
</path>
<path pattern="/api/books/{book-id}/authors/{author-idx}">
<GET><invoke>bp06</invoke></GET>
<PUT><invoke>bp07</invoke></PUT>
<DELETE><invoke>bp08</invoke></DELETE>
</path>
</urecphttp-routing>この場合,URLパラメタの抽出結果を保持するヘッダ電文のスキーマ(urecp_http_header_urlparameter.xsd)は,次のように作成してください。
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema elementFormDefault="qualified"
targetNamespace="http://www.hitachi.co.jp/soft/xml/cosminexus/csc/reception/http/request"
xmlns:hrc="http://www.hitachi.co.jp/soft/xml/cosminexus/csc/reception/http/request"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="http-header-urlparametersType">
<xsd:sequence>
<xsd:element name="book-id" type="xsd:string"/>
<xsd:element name="author-idx" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>