web-dev-qa-db-ja.com

RESTで状態を管理する方法

この質問はおなじみのように聞こえると思いますが、私はRESTに困惑しているもう1人のプログラマーです。

StateAからStateBに移行する従来のWebアプリケーションがあります。ユーザーがStateB(のURL)にアクセスした場合、彼が以前にStateAにアクセスしたことを確認したいと思います。伝統的に、私はセッション状態を使用してこれを行います。

RESTではセッション状態が許可されていないので、これをどのように達成できますか?

32
user317050

2 RESTこれに対する答えは、具体的に何をしようとしているのかに応じて異なります。

本当に要求ベースの状態を管理しようとしている場合(ユーザーがマルチスクリーンウィザードやその他のナビゲーションベースのワークフローを使用しているときなど)、REST答えはその状態ですリクエスト/レスポンスごとに(非表示のテキストフィールド、クエリ文字列、またはPOSTデータがフォームに格納されているなどのデータを使用して)送信されます。これはMartinの実装です。ファウラーの「クライアント状態」のデザインパターン(詳細は彼の著書のエンタープライズアプリケーションアーキテクチャのパターン;参照) 参照はこちら =)。

一方、サーバー上でショッピングカートなどの新しいオブジェクトを管理しようとしている場合、REST答えは、実際に新しいオブジェクトを作成しているということです。直接URLで他のエンティティと同様にアクセスできるエンティティ。この新しいエンティティをデータベースまたはアプリケーションメモリ(従来のSessionオブジェクトなど)に保存するかどうかは任意ですが、どちらの方法でも、新しいオブジェクトはサーバーの「状態」について、そしてユーザーが対話するための新しいエンティティの作成について。

50
KP Taylor