接続仕様

ここでは、INFINI HOST-LINK InterNet版システム(以下本システム)においてINFINI内に設置されたアプリケーションサーバ(以下サーバ)と、ユーザ敷地内に設置されたサーバ(以下クライアント)との間のSabre Web Services(以下、SWS)機能利用に関するインタフェース仕様を記述する。
なお、ここではプロトコル層以上について記述し、ネットワークの物理層については範囲外とする。

基本仕様

1. サーバとクライアント間の通信はHTTP/1.0,1.1 仕様に基づくHTTP プロトコルを用いるものとする。

2. 通信はすべてクライアントからの接続とし、サーバからの応答をもって完結する。
  また、メソッドは POST のみ使用する。
  ※ソケットの接続状態(Keep-Alive 制御)についてはIIS の実装に準じる。

3. セッションの概念を持たない HTTP 上においてセッション管理を実現するため、
  HTTP ヘッダを用いたセッション管理を行う(いわゆるクッキー方式を使用する)
  ※セッションとは、HOST-LINK サーバを経由してのINFINI ホストに対するサイン・イン(Sign in)から
  サイン・アウト(Sign out)までの接続状態を擬似的にHTTP プロトコル上に実現するものである。

4. また、クッキーのみでは制御できないプロトコルを実現するために、HTTP 拡張ヘッダを定義して使用する。

5. HTTP のコンテンツは基本的に INFINI HOST-LINK XML 版 User’s Guide に定義された XML データとする。
  原則としてサーバはこのXML データの内容については関知しない。
  ※メッセージの先頭から連続する改行までをHTTP ヘッダとし、以降をコンテンツと呼ぶ。
  ※SWS 機能利用においてMODE=SCREEN の指定は不可とする。指定された場合、サーバは無視する。

6. メッセージはヘッダー、コンテンツともすべてASCII 文字で構成されるものとする
  本システムにおいて日本語などのマルチバイト文字やバイナリデータなどは使用しない)
  ※”#”、”¥”、”^”等の特殊記号の送受信方法については、Users’Guide 参照のこと

7. 本サービスは下記のURL で提供される。
  本番環境:https://www.infini-hostlink.com/HostLinkService/infiniAPI.asp
  テスト環境:https://testsite.infini-hostlink.com/HostLinkService/infiniAPI.asp

8. 未承認ユーザからのアクセスについて
  ユーザ登録には、ユーザ側サーバIP アドレスと利用PCC を必要とする。
  登録されたIP アドレスや指定されたPCC以外からのアクセスに対し、本システムは特にエラー回答はせず、
  HTTP メッセージのみを回答する。

※上記1,2 と合わせ、クライアント側からのHTTP リクエストメッセージは以下で開始されるものとなる。
  本番:POST https://www.infini-hostlink.com/HostLinkService/infiniAPI.asp HTTP/1.1
  テスト環境:POST https://testsite.infini-hostlink.com/HostLinkService/infiniAPI.asp HTTP/1.1

構成

本仕様を実現するための、構成(案)を付図に示す。
※ なお、クライアント側構成については想像に基づくものである。



※クライアント(Agent System)側はなんらかのアプリケーションサーバ機能により、
 サーバ(INFINI System)より付与されたCookie 値を維持することを想定する。

セッションの管理

各セッションのフェーズに応じて、下記の拡張ヘッダを含むHTTP ヘッダが送付されるものとする。

<セッションの開始>
1. セッションの開始時にクライアントは、下記 HTTP ヘッダを持つリクエストメッセージを送信する。
  X-XML-Booking-Session: SESSION=START
  X-XML-Booking-PCC: PCC=XXXX
  X-XML-Booking-Host: HOST=SWS

  ※XXXX は旅行会社の持つPCC であり、サイン・インに使用される。

2. 上記要求に対しサーバは、SWSとの接続を確立し、その結果を、下記HTTPヘッダーを持つ
  レスポンスメッセージによりクライアントに送信する。
  X-XML-Booking-Status: STATUS=XXXX
  Set-Cookie: ASPSESSIONIDYYYYY=ZZZZZ; ....
  Set-Cookie: TOKEN=MMMM
  ※クライアントは通知されたクッキー情報(ASPSESSIONIDYYYYY=ZZZZZ 及び TOKEN=MMMM)を
   記憶しておく。(YYYYY,ZZZZZ,MMMM は任意の長さの文字列である)。
  ※クッキー情報内の";"以降の文字列についてはクライアントで無視する(付かない場合もある)。
  ※"Set-Cookie"という識別子を持つヘッダー情報は単一ではないため、それぞれ取得する必要がある。

  ※セッション確立中でのホスト接続先変更(HOST→SWS またはSWS→HOST)は不可とする。
   HOST セッション接続中にSWS にセッション開始を行うと、HOST セッションは終了しない。
  (SWS→HOST も同様)
  ※X-XML-Booking-Session: SESSION=START_END との同時指定も可能とする。



<セッションの維持>

1. クライアントはセッション継続中のリクエストメッセージには、下記 HTTP ヘッダを付けて送信する。
  (1) X-XML-Booking-Host: HOST=SWS
  (2) Cookie: ASPSESSIONIDYYYYY=ZZZZZ
  (3) Cookie: TOKEN=MMMM
  ※ Cookie 情報はセッション開始時にサーバから返された情報であること。


2. 上記要求に対しサーバは、コンテンツデータを処理し、その結果を、下記HTTP ヘッダーを持つ
  レスポンスメッセージによりクライアントに送信する。
  X-XML-Booking-Status: STATUS=XXXX


<特殊コマンドの実行>

1. クライアントは以下の特殊コマンドを実行したい場合、リクエストメッセージに下記HTTPヘッダーを付けて
  送信する。

  X-XML-Booking-SWSCONFIG: SERVICE=XXXX, ACTION=YYYY
  ※上記HTTP ヘッダーは、以下の特殊コマンドを実行する時だけ送信すること。

2. 特殊コマンド一覧
# コマンド SERVICEの値 ACTIONの値
1 BFM-Alternate Date Bargainfinder Max AD BargainFinderMax_ADRQ


<セッションの終了>

1. クライアントはセッションを終了させるために、下記 HTTP ヘッダを持つリクエストメッセージを送信する。

 (1)   X-XML-Booking-Host: HOST=SWS
   Cookie: ASPSESSIONIDYYYYY=ZZZZZ
   Cookie: TOKEN=MMMM
   X-XML-Booking-Session: SESSION=END

 (2)   X-XML-Booking-Host: HOST=SWS
   Cookie: ASPSESSIONIDYYYYY=ZZZZZ
   Cookie: TOKEN=MMMM
   X-XML-Booking-Session: SESSION=START_END

※ (2)の場合はセッション開始、終了を同時に行う。
※ Cookie 情報はセッション開始時にサーバから返された情報であること。



<サーバー障害に伴うセッション終了>

1. サーバにおいてリクエスト受信後に、処理を継続できない状況が生じた場合、サーバは
  下記HTTP ヘッダを持つレスポンスメッセージを送信する。
   X-XML-Booking-Session: SESSION=END
   X-XML-Booking-Status: STATUS=XXXX

  ※ XXXX は障害を示すステータスとする。
  ※ ホストのタイムアウトなどを想定しているため、セッションは切断されることを前提とする。


2. 同様にリクエスト受信後に、応答も返せない状況が生じた場合、クライアントは一定時間受信待ち後
  セッションを切断すること。



<クライアント障害に伴うセッションタイムアウト>

1. クライアントにおいて処理を継続できない状況が生じた場合、(上記「セッションの終了」参照)と
  同じ手順によりセッション終了要求を行うこと。

2. セッション終了要求も送信できない状況が生じた場合、サーバは一定時間セッションを維持した後、
  セッションを終了させる。

コンテンツ

通常コンテンツには、SWS 仕様に基づくXML メッセージが含まれるが、下記のヘッダーが付いた場合には、
そのメッセージのコンテンツは無視するものとする(サーバ、クライアント双方において)。

※ 下記ヘッダーがついたメッセージのコンテンツはSabre仕様に含まれない独自XMLとする。
  X-XML-Booking-Contents: CONTENTS=IGNORE

例 1: クライアントから、セッション開始/セッション終了のみ行う場合のリクエスト/レスポンスメッセージ
例 2: サーバにて障害が発生した場合のレスポンスメッセージ

通信例

上記仕様に基づいた通信例は以下の通りである。

通常パターン


セッション開始要求のみ先行するパターン



セッション終了要求のみクライアントから送信するパターン



サーバーからセッション終了要求を送信するパターン



セッションタイムアウト終了後にクライアントから要求を送信するパターン



クライアントセッション開始要求と終了要求の両方が指定されたパターン



特殊コマンドを実行するパターン


 

セキュリティ

1. 本システムにおいて、INFINI 側LAN とユーザ側LAN 間の通信(WAN)については物理層によって
  十分セキュリティが確保されていることを前提とし、この部分のセキュリティ対策は本設計書では記述しない。
2. INFINI 側LAN 内部およびユーザ側LAN 内部におけるセキュリティ保持のため、サーバにおいて下記の対策を取る。

リクエストメッセージ送信元の確認
1. リクエストメッセージ送信元のIP アドレスをチェックし、あらかじめ設定された
  IP アドレス以外からのリクエストはエラー応答し、該当セッションを切断する。
2. セッション開始時の送信元IP アドレスを記憶しておき、セッション途中ではそのIP アドレス
  以外からの要求はエラー応答する。

セッションのタイムアウト
1. 一定時間リクエストの無いセッションについては、サーバでこれを無効化する。
2. 無効化されたセッションを指定したリクエストメッセージについては、エラー応答する。
  この場合の HTTP ヘッダは下記のとおりとする。
   X-XML-Booking-Session: SESSION=END
   X-XML-Booking-Status: STATUS=9C00
   X-XML-Booking-Contents: CONTENTS=IGNORE

 ※ ただし、そのメッセージがセッション開始要求の場合は正常リクエストとみなし、
   新規セッションを開始する。
   ※ タイムアウト値は10 分とする。

受信コンテンツサイズの制限
ありえないサイズのリクエストを受信することによるメモリ不足や高負荷の発生を予防するため、
受信中のコンテンツサイズが32KB を超えた時点で以降の受信を中止しエラー応答する。
 

特記

1.  ステータス・コードについては、付録に一覧を添付する。
2.  本設計書のセッション管理方法は、RFC2109(HTTP State Management Mechanism)に準拠する。
3.  HTTP 拡張ヘッダは、RFC822(STANDARD FOR THE FORMAT OF ARPA INTERNET
   TEXT MESSAGES)に準拠し、先頭文字を "X-"とする。
4.  また、RFC2616 に準拠し HTTP ヘッダ識別子(":"の左側の文字列)において大文字/小文字は
   区別されないものとする。
5.  特に断りの無い限り、サーバより送信するHTTP メッセージ仕様は IIS7.5 の実装に依存する。

付録<INFINI HOST-LINK XML版ステイタス・コードについて>

現在のINFINI HOST-LINK XML 版に基づいて返されるステータス・コード(拡張ヘッダの
STATUS に設定される値)は下記の定義に従った16 進4 桁数値である。

エラーコード

エラーコード       エラー内容       
0000 正常
9401 PCC エラー(末尾が6 でない、または長さが8 バイトより長い)
9402 不正なアクセス(途中で IP アドレスが未登録 IP アドレスに変更された)
9403 不正なアクセス(未登録 IP アドレスから受信)
9404 コンテンツが長すぎる(32KB を超えている)
9405 メソッドがPOST ではない
9406 認識できないヘッダーがある
9407
(Sxxx)
サイン・イン・エラー
xxxx はホスト・エラー・コード
9408 PCC セッション上限数オーバー
9409 許可されていないコマンド
940A コマンド、モード組み合わせ指定エラー
940B XML 解析エラー
940C 不正なクッキー
9C00 ホストとの接続時エラー
セッションが存在しない
9C02 ホストとの接続時エラー
接続タイムアウト
9C04 ホストとの接続時エラー
サインアウトエラー
A402 ホストからの受信エラー
受信タイムアウト
A405 ホスト、サーバータイムアウト
A887 ホストへの送信エラー
送信タイムアウト
A8FF 受信したレスポンス・データが空だった
AC01
(xxx)
SWS ホスト通信エラー
SWS ホストへのコマンド送受信時のHTTP ステータスコードが200 でない
xxx はステータスコード
AC02 ホストビジー
AC03
(SWS)
ホストビジー
通信毎にスレッド数の上限数オーバ
B001 サーバーセッション数オーバー
FFFF 内部エラー

※MODE=SCREEN を指定された場合は、常にホスト・エラー・コードの認識を行わない。