Restful APIでの「ステートフル」について

REST(Restful API)では通常、通信はステートレスです。それは、HTTPプロトコル自体がステートレスだからです。
しかし、ログインが発生するようなWebアプリケーションの場合通信は(通信全体としてみると)ステートフルになります。

では、「ステートレス」とはどのような状態を指すのでしょうか?
JavaによるRESTFulシステム構築』(オライリー・ジャパン刊)ではこう記されています。

RESTの場合、ステートレスとは、クライアントセッションデータがサーバに格納されないことを意味する。

Tomcatのようなアプリケーションサーバで動作している場合、セッションIDなどをクッキーで管理してサーバとクライアントが密に紐付きます。
このようになるとRESTの実現が難しくなります。

では、どのようにサーバ自体を「ステートレス」にするか?
私の解決策としては、状態(セッション情報)を外部DBに保存することにしました。
ちなみに外部DBはNoSQLであるMongoDBを使用しています。

セッション情報の保存であればRedisも良いかもしれません。

次回以降では、Jerseyで(サーバが)ステートレスでありながら(通信全体として)ステートフルを実現する一つの方法を書きます。