Restful APIでの「ステートフル」について
REST(Restful API)では通常、通信はステートレスです。それは、HTTPプロトコル自体がステートレスだからです。
しかし、ログインが発生するようなWebアプリケーションの場合通信は(通信全体としてみると)ステートフルになります。
では、「ステートレス」とはどのような状態を指すのでしょうか?
『JavaによるRESTFulシステム構築』(オライリー・ジャパン刊)ではこう記されています。
RESTの場合、ステートレスとは、クライアントセッションデータがサーバに格納されないことを意味する。
Tomcatのようなアプリケーションサーバで動作している場合、セッションIDなどをクッキーで管理してサーバとクライアントが密に紐付きます。
このようになるとRESTの実現が難しくなります。
では、どのようにサーバ自体を「ステートレス」にするか?
私の解決策としては、状態(セッション情報)を外部DBに保存することにしました。
ちなみに外部DBはNoSQLであるMongoDBを使用しています。
セッション情報の保存であればRedisも良いかもしれません。
次回以降では、Jerseyで(サーバが)ステートレスでありながら(通信全体として)ステートフルを実現する一つの方法を書きます。