[解決済み] RESTアプリケーションはステートレスであることが前提である場合、セッションはどのように管理するのですか?
質問
ちょっと教えてほしいことがあるんです。RESTとRESTfulアプリケーションの構築について読んでいます。wikipediaによると、RESTそのものは次のように定義されています。 表現型状態遷移 . したがって、私はこのステートレスな ごちゃごちゃ というようなことを、みんなが言い続けている。
wikipediaより。
<ブロッククオートクライアントは、ある特定の時点で、以下のいずれかの状態に移行することができます。 アプリケーションの状態、または静止状態です。静止状態のクライアントは、以下のことが可能です。 ユーザーと対話することはできますが、負荷は発生せず、クライアントごとの サーバ群やネットワーク上のストレージに保存される。
セッション/アプリケーションレベルのデータストアを使うなということなのでしょうか?
例えば、ページングリクエストを投稿の中に隠す代わりに、リクエストのページ番号をGET URIの一部にすることです。 私には理にかなっていると思います。しかし、それはただ単に言い過ぎただけのような気がします。 クライアントごとのデータなし (セッションデータ)をサーバーサイドに保存してはいけません。
メッセージのキューがあり、ユーザーがメッセージを読みたいと思ったとき、それを読みながら、セッションの間、特定の送信者のメッセージをブロックしたいとしたらどうでしょうか。これをサーバ側に保存して、ユーザがブロックしていないメッセージ(またはメッセージID)だけをサーバが送信するようにするのは理にかなっていると思いませんか?
新しいメッセージリストを要求するたびに、ブロックするメッセージ送信者の全リストを送信しなければならないのでしょうか?私に関係するメッセージリストは、そもそも一般に利用可能なリソースでもないでしょうし、そうあるべきでもないでしょう...。
もう一度言いますが、これを理解しようとしただけです。誰か お願い を明確にする。
更新しました。
スタックオーバーフローの質問で、なかなかたどり着けない答えがあるのを発見しました。 RESTで状態を管理する方法 これによると、重要なのはクライアントの状態である が必要です。 はすべてリクエストごとに転送される......。うぐぐ...オーバーヘッドが多いような...。これで良いのでしょうか?
解決方法は?
根本的な説明をします。
<ブロッククオートサーバーにクライアントセッションの状態がない。
ステートレスというのは サーバー に関するいかなる状態も保存しません。 クライアントセッション をサーバ側で実行します。
は クライアントセッション はクライアントに保存されます。サーバーがステートレスであることは、すべてのサーバーがいつでもどのクライアントにもサービスを提供できることを意味します。 セッションアフィニティ または スティッキーセッション . 関連するセッション情報は、クライアントに保存され、必要に応じてサーバーに渡されます。
これは、ウェブサーバーが通信する他のサービスが、ショッピングカートのようなビジネスオブジェクトに関する状態を維持することを妨げるものではありません。
その クライアントの アプリケーションの状態は、決してサーバーに保存されるべきではありません。 クライアント を、それを必要とするすべての場所に送信します。
そこで ST で REST から来る。 状態遷移 . サーバーに状態を保存させるのではなく、状態を転送するのです。 これが、数百万人の同時ユーザーにスケールアップする唯一の方法です。 何百万ものセッションは、何百万ものセッションだからです。
セッション管理の負荷はすべてのクライアントで償却され、クライアントはセッションの状態を保存し、サーバーは何桁も多くのクライアントにステートレスでサービスを提供することができるのです。
と思うようなサービスでも だけ 数万人規模の同時接続ユーザーを必要とする場合でも、サービスをステートレス化する必要があります。数万人というのは、やはり数万人であり、それに伴う時間的、空間的コストが発生します。
ステートレスは、HTTPプロトコルとWeb全般が動作するように設計されており、全体的にシンプルな実装です。また、多くのセッション状態を維持するためのサーバー側ロジックの代わりに、単一のコードパスを持っています。
非常に基本的な実装の原則があります。
これらは実装ではなく原則であり、これらの原則をどのように満たすかは様々です。
要約すると 五大原則 となります。
- すべての「モノ」にIDを付与する
- モノとモノをつなげる
- 標準的なメソッドを使用する
- 複数の表現を持つリソース
- ステートレスで通信する
RESTには、認証や認可に関するものはありません。 ディセンション .
なぜなら、RESTfulなリクエストとそうでないリクエストを認証することに何の違いもないからです。認証はRESTfulの議論とは無関係です。
特定の要件に応じたステートレス・アプリケーションを作成する方法を説明する、は 広すぎる StackOverflowのために。
RESTに関連する認証と認可の実装はさらにそうです 広すぎる と、様々な実装のアプローチがインターネット上で一般に詳しく説明されています。
これに関するヘルプ/情報を求めるコメントには、次のようなフラグを付けるだけでよいでしょう。 不要になったもの .
関連
-
[解決済み] SOAPとRESTの比較(相違点)
-
[解決済み] HttpClientリクエストのContent-Typeヘッダーはどのように設定するのですか?
-
[解決済み] RESTを理解する。動詞、エラーコード、認証
-
[解決済み】REST APIでのPUTメソッドとPATCHメソッドの使い分け 実生活でのシナリオ
-
[解決済み】無効なデータに対するRESTレスポンスコード
-
[解決済み] オブジェクト内のアイテムの合計数を返すための最良のRESTfulメソッドは何ですか?
-
[解決済み] HTTP DELETEでリソースを2回目に削除したときのステータスコード
-
[解決済み] これを理解するのを助けてくれる?"よくあるRESTの間違い "です。セッションは無関係"
-
[解決済み] RESTとは?若干の混乱【終了
-
[解決済み】セッションは本当にRESTfulnessに違反するのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SOAPとRESTの比較(相違点)
-
[解決済み] リソースが既に存在する場合の POST に対する HTTP レスポンスコード
-
[解決済み] API のバージョン管理に関するベストプラクティス?[クローズド]
-
[解決済み] RESTリソースの命名規則はSingularとPluralのどちらを使用すべきですか?
-
[解決済み] 検索のためのRESTfulなURL設計
-
[解決済み] RESTのネストされたリソースのベストプラクティスは何ですか?
-
[解決済み] オブジェクト内のアイテムの合計数を返すための最良のRESTfulメソッドは何ですか?
-
[解決済み] リソースとエンドポイントの違いは何ですか?
-
[解決済み] RESTでトランザクション?
-
[解決済み] HATEOAS(REST-architecture)の実例集 [終了しました]。