1. はじめに
1.1 目的
従来クライアント/サーバ方式によるデータベースの検索・更新システムは"stateful"すなわちセッション指向のプロトコルの上に構築されていた。ところが最近のインターネットの主流はwebブラウザ/サーバで使用されているHTTP[1]のようにセッションの概念をもたない"stateless"なプロトコルである。本プロトコルはデータベースの検索・更新システムに対し、セッションに依存しないクライアントとサーバ間のメッセージ交換方式を規定するものであり、HTTPのような"stateless"なプロトコルの上に実装可能なようにデザインされている。また従来のセッション指向のプロトコルへの実装も可能なようにデザインされている。
1.2 プロトコルの仕組みの概要
1.2.1 プロトコルの特徴
本プロトコルによる通信は、リクエストとそれに対するレスポンスという枠組で行なわれる。リクエストを行なうプログラムをクライアントと呼び、それを受けとるプログラムをサーバと呼ぶ。本プロトコルの特徴は、クライアントとサーバ間でハンドルをやり取りする点にある。ハンドルとは、ハンドル確保のリクエストによりサーバよりクライアントに割り当てられるものであり、ハンドルを解放するまで有効なクライアント識別情報である。また、ハンドルにはフレームがバンドルしている。フレームは同一のハンドルに対し任意のリクエストの結果サーバに生成された情報を識別するものである。クライアントは複数のハンドルを取得可能である。また、同一のハンドルに対し複数のフレームを取得可能である。
ハンドルの実装例として、ハンドル確保のリクエストに対しサーバがクライアントに対応するユーザ情報等をバンドルすることが可能である。また、本プロトコルでは、少なくともフレームに、データベースの検索の結果生成される検索結果集合をバンドルさせることを規定している。これは、RETRIEVEメソッドやSCANメソッドのように検索結果集合を取り扱うメソッドを規定しているためである。
1.2.2 メッセージ交換の概要
データベースを検索し、任意のデータベースレコードを更新する一連の処理を例に本プロトコルのメッセージ交換の概要を示す。本プロトコルにおけるリクエストは1つのリクエストライン、必要に応じて複数のヘッダフィールド/ボディ部内のレコードから構成される。また、レスポンスは1つのステータスライン、必要に応じて複数のヘッダフィールド/ボディ部内のレコードから構成される。
- クライアントはハンドル確保のリクエスト(GETHANDLEメソッドリクエスト)をサーバに送信する。サーバは本リクエストが妥当であれば当該クライアントに対しハンドルを割り当てレスポンスとして返送する。その際、ハンドルにバンドルするフレームとしてデフォルトのフレームを返送する。
- クライアントはハンドルの確保に成功した場合に次のリクエスト処理を行う。例えばデータベースの検索が必要になった場合、取得したハンドルとフレーム(または新たなフレーム)並びに検索条件式等をもとに検索リクエスト(SEARCHメソッドリクエスト)をサーバに送信する。サーバはリクエスト内のハンドルが妥当なものであれば、リクエストに基づきデータベースの検索を試み、検索結果をレスポンスとして返送する。その際、サーバは検索結果集合等をリクエストにより指定されたフレームにバンドルする。また、検索結果、該当するデータベースレコードを複数返送することも可能である。
- クライアントはデータベースにレコードの登録が必要になった場合、取得したハンドルと登録レコード等をもとに登録リクエスト(INSERTメソッドリクエスト)をサーバに送信する。サーバはリクエスト内のハンドルが妥当なものであれば、リクエストに基づきデータベースへのレコードの登録を試みる。その結果をレスポンスとしてクライアントに返送する。
- クライアントはサーバへのリクエストが不要になった場合、ハンドル解放のリクエスト(RELEASEHANDLEメソッドリクエスト)をサーバに送信する。サーバは本リクエストが妥当であればハンドル並びにハンドルにバンドルされた情報(フレーム等)を解放し、その結果をレスポンスとして返送する。
1.3 用語の説明
本プロトコルで使用している用語に対し特に説明が必要と思われる主な用語について記述する。
- コネクション(connection)
- 通信の目的のために2者の間に仮想回線を開設すること。
- リクエスト(request)
- 本プロトコルのリクエストメッセージ(3章、4章で定義されている)。
- レスポンス(response)
- 本プロトコルのレスポンスメッセージ(3章、4章で定義されている)。
- クライアント(client)
- リクエストを送る目的でコネクションを確立するプログラム。
- サーバー(server)
- リクエストに対しレスポンスを返して答えるためにコネクションを受けつけるプログラム
- メソッド
- 本プロトコルが提供するサービスで、リクエスト並びにレスポンスを種別する。