「アプリケーション状態」を正しく理解したい

先日、檜山正幸さんのブログ記事「ハイパーリンクは何を繋ぐのか」にコメントを投稿した。「アプリケーション状態」に関する檜山さんの説明に誤りがあると思い、さらに、基本的概念の把握に誤りがあるのなら記事の結論が変わるかもしれないと思ったからだ。だが、それは僕の早とちりだったようだ。檜山さんと僕は同じ物を見ながら、おそらく、別々の言葉で説明しているだけなのだ。

それでも檜山さんの論旨にはしっくりこない部分があるので、いろいろ調べているうちに、逆に、僕のコメントの中に誤りが含まれていることに気づいてしまった。説明が長くなるので、ここで訂正しておきたい。

誤りとは「アプリケーション状態」がRESTに固有の概念であるかのように書いてしまったことだ。Roy T. Fieldingはrest-discussメーリングリストへのある投稿において「Application state exists regardless of the style used」と書いている。つまり、アプリケーション状態はアーキテクチャスタイルとは無関係に存在するものなのだ。

アプリケーション状態=セッション状態=トランザクション状態

アプリケーション状態とは何なのか。Royは別の投稿で「Application state in REST is what most distributed systems would call session state or transaction state, depending on which end of the system is being talked about」と書いている。ほとんどの分散システムでは「セッション状態」や「トランザクション状態」とよばれるもの、それをRESTではアプリケーション状態とよんでいる、というのだ。わざわざ別の用語を使うのは、セッション状態やトランザクション状態ではネットワークやデータベースの話だと誤解されかねないからだ。

山本陽平さんは、注目を集めた記事「ステートレスとは何か」で、ハンバーガーショップにおける客の注文状態を例に挙げ、いみじくも「これをアプリケーション状態、あるいはセッション状態と呼ぶ」と説明されている。

Webアプリのアプリケーション状態はリンクをたどらなくても遷移する

同じく山本さんの「REST と ROA」(PDF)では、以下の3つがアプリケーション状態の例として挙げられている。

  • 今、どの Web ページを表示しているか
  • どのチェックボックスを選択し
  • どのユーザで認証しているか

チェックボックスの例に注目すると、Webアプリケーションにおいては、あるアプリケーション状態から別のアプリケーション状態に遷移するに際して、必ずしもサーバとのやりとりを経る必要はないと分かる。ただブラウザ上でチェックボックスを選択/解除するだけでも、アプリケーション状態が遷移するということだ。HATEOAS(アプリケーション状態エンジンとしてのハイパーメディア)などと聞くと、あたかもリンクをたどらないことにはアプリケーション状態が遷移しないかのように誤解してしまいそうだが、そんなことはないのである。

OSS-DB Exam Silverに合格した

昨日7日、OSS-DB Exam Silverを受験し、無事合格した。

試験は50問で、合格ラインは正解率64%。僕の正解率は88%だった。6問間違えたことになる。

教材として使った『徹底攻略 OSS-DB Silver問題集』と『OSS教科書 OSS-DB Silver』では(たぶん)触れられていない問題も多く出題され、予想より難しい印象だった。それだけ出題範囲が広いということなのだろう。

実際の試験時間が80分だったのにも面食らった。記事冒頭にリンクした試験概要ページには「試験時間は90分」と書かれているのだが、これには試験前の「機密保持契約への同意」や試験後の「簡単なアンケート」が5分ずつ勘定されているのだろう。この10分の差が、けっこうなプレッシャーになった。

ともあれ、合格できたのは素直に嬉しい。Goldにも挑戦するつもりだ。来年かな。

記事検索
Twitter