セッションは本当にRESTfulnessに違反しますか? 質問する

セッションは本当にRESTfulnessに違反しますか? 質問する

RESTful API でセッションを使用することは、本当に RESTfulness に違反しているのでしょうか? どちらの意見も数多く見てきましたが、セッションがRESTless であるとは確信できません。私の観点からすると:

  • RESTfulness のために認証は禁止されていない (そうでない場合、RESTful サービスではほとんど役に立たない)
  • 認証は、リクエスト内の認証トークン(通常はヘッダー)を送信することで行われます。
  • この認証トークンは何らかの方法で取得する必要があり、取り消される可能性があり、その場合は更新する必要があります。
  • 認証トークンはサーバーによって検証される必要があります(そうでない場合は認証になりません)

では、セッションはどのようにしてこれに違反するのでしょうか?

  • クライアント側では、セッションはクッキーを使用して実現されます
  • クッキーは単なる追加のHTTPヘッダーです
  • セッションクッキーはいつでも取得および取り消すことができます
  • セッションクッキーは必要に応じて無期限に存続することができる。
  • セッションID(認証トークン)はサーバー側で検証されます

そのため、クライアントにとって、セッション クッキーは、 またはその他の独自のヘッダーCookieの代わりに ヘッダーを使用することを除けば、他の HTTP ヘッダー ベースの認証メカニズムとまったく同じですAuthorization。サーバー側のクッキー値にセッションが添付されていない場合、それがなぜ問題になるのでしょうか。サーバーがRESTfulに動作する限り、サーバー側の実装はクライアントを気にする必要はありません。そのため、クッキー自体が API をRESTlessにするべきではなく、セッションはクライアントにとって単なるクッキーです。

私の仮定は間違っていますか? セッション クッキーがRESTless になる理由は何ですか?

ベストアンサー1

まず第一に、REST は宗教ではないので、そのようにアプローチすべきではありません。RESTful サービスには利点がありますが、アプリケーションにとって意味がある限りにおいてのみ、REST の原則に従うべきです。

とはいえ、認証とクライアント側の状態は REST の原則に違反しません。REST では状態遷移がステートレスであることが求められますが、これはサーバー自体のことです。REST の根底にあるのはドキュメントです。ステートレスの背後にある考え方は、サーバーがステートレスであり、クライアントがステートレスではないということです。同一のリクエスト (同じヘッダー、Cookie、URI など) を発行するクライアントは、アプリケーション内の同じ場所に移動する必要があります。Web サイトがユーザーの現在の場所を保存し、このサーバー側のナビゲーション変数を更新することでナビゲーションを管理する場合、REST に違反することになります。同一のリクエスト情報を持つ別のクライアントは、サーバー側の状態に応じて異なる場所に移動します。

Google の Web サービスは、RESTful システムの素晴らしい例です。これらのサービスでは、すべてのリクエストでユーザーの認証キーを含む認証ヘッダーを渡す必要があります。サーバーが認証キーの状態を追跡しているため、これは REST の原則に少し違反しています。このキーの状態は維持する必要があり、何らかの有効期限が設定されており、その期限を過ぎるとアクセスが許可されなくなります。ただし、投稿の冒頭で述べたように、アプリケーションが実際に機能するには犠牲を払う必要があります。とはいえ、認証トークンは、すべてのクライアントが有効な期間中はアクセスを許可し続けることができる方法で保存する必要があります。あるサーバーが認証キーの状態を管理しているため、別の負荷分散サーバーがそのキーに基づいてリクエストの処理を引き継ぐことができない場合は、REST の原則に違反し始めています。Google のサービスでは、いつでも、スマートフォンで使用していた認証トークンを負荷分散サーバー A に対して取得し、デスクトップから負荷分散サーバー B にアクセスしても、システムにアクセスでき、リクエストが同一であれば同じリソースにリダイレクトされます。

結局のところ、REST プロパティをできるだけ多く保持するためには、認証トークンが何らかのバックアップ ストア (データベース、キャッシュなど) に対して検証されていることを確認する必要があります。

ここまでの内容が理解できたでしょうか。制約セクション表現的状態転送に関するウィキペディアの記事まだ読んでいないのであれば、ぜひ読んでみてください。REST の信条が実際に何を主張しているのか、そしてその理由については特に啓発されます。

おすすめ記事