web-dev-qa-db-ja.com

Restful Webサービスをステートフルにできるか

Restful webservicesがステートレスであることについて読んでいます。また、ほとんどのSOAPベースのWebサービスもステートレスであり、必要に応じてステートフルにすることができ、それらをステートフルにするかどうかは実装によって異なります。したがって、SOAPベースのWebサービスがステートフルの場合、セッションを続行するために、リクエストごとにセッションIDが渡されます。

私のクエリは、Restful Webサービスで同じことができない理由です。RestfulWebサービスの作成によってステートフルでセッションIDが渡される同じセッションで続行できるWebサービスを実装できるはずです。

だから私の質問は、RestFul Webサービスは、ステートフルにしないためのガイドラインを備えた概念にすぎないのですか?または、Restful Webサービスライブラリ(Jerseyのような)でチェックを行い、人々がそうしないようにしますか?

18
Lokesh

RESTのステートレス性は、アプリケーションを適切にスケーリングできるように設計されています。状態を追加できますが、スケーラビリティのトレードオフになります。

RESTに状態を追加する最も一般的な理由の1つは認証用です。安全な接続が確立されると、安全なCookieをクライアントに送信できます。このCookieは、クライアントによってセッションのすべてのリクエスト。サーバーは状態を維持し、Cookieに基づいてすべてのリクエストでその状態をロードします。

単純なWebページを考えてみましょう。状態を維持していない場合は、リバースプロキシを設定し、ページをURLごとにメモリにキャッシュし、そのリソースを多数のサーバーに分散して負荷をかけることができます。現在ログインしているユーザーの名前をそのWebページに追加すると、何も(少なくとも最も基本的なHTTPレベルでは)キャッシュできなくなります。応答は、認証CookieとURLの組み合わせでのみキャッシュできるようになりました。

14
rich remer

私が知っている限り、私たち(.net開発者)は、ステートフルWebサービスのwcfでWSバインディングを使用できます。

1
AAAA

RestであれSOAPであれ、Webサービスはデフォルトでステートレスに設計されています。ただし、ステートフルであることが必要とされるユースケースがある場合があります。 OASISが提供するWebサービスリソースフレームワーク(WSRF)を使用して、SOAP Webサービスをステートフルにします。ResourceProperties属性をエンドポイントに追加し、ResourceProperty操作をWSDLに追加して渡しますWebサービス全体。

Restは状態転送を行っており、それらをステートフルにするために、クライアント側またはdb永続セッション状態を使用して、ヘッダーまたはメソッドパラメーターのいずれかの属性としてWebサービス呼び出し全体でそれらを転送できます。

0