REST HyperMedia:ユーザーの権限に基づいてアクションをフィルタリングする必要がありますか?
-
21-12-2019 - |
質問
Roy FieldingのHyperMediaによると、アプリケーション状態(HATEOAS)のエンジンとしての各リソースは、そのリソースで行うことができるアクション(またはリンク)のリストに依頼してください。
アクションがエンティティに含まれている場合(JSON-Schemaのlinks属性を使用するように添付されているように)、特定のオプションが認証されたユーザーが利用できないことをユーザーエージェントに指示する方法は?
バックエンドはフィルタリングを実行できますが、同じリソースURLは認証されたユーザーによって異なる表現を持つことができます。そしてこれは安静やキャッシングにやさしいようです。
もう1つのオプションは、すべてのリンクを残し、アクションが認証されたユーザーが利用できない場合に、ユーザーエージェントが禁止されている403を受信させることです。これはユーザーにとって迷惑になる可能性があります。
残りの休憩所に応じて、認証されたユーザーによって変わる場合は、利用可能なアクションにユーザーエージェントを通知する方法。
解決
正しいです。ユーザー権限に基づいて変わる表現の作成は特にキャッシュにやさしいものではありません。許可のバリアントをほんの数のカテゴリに分類することは可能ですか?例えばリソース - 低セキュリティ、リソース中 - セキュリティリソース - 高セキュリティ
このアプローチが可能であることがあることがあります。考慮すべき他の側面は、キャッシングがこの特定のリソースにとって重要であるかどうかです。たぶんそれは?
また、ユーザーがフォローする権限があるかどうかを確認するには、ユーザーがリンクをクリックするまで待つ必要はありません。クライアントは、バックグラウンド内のリンクに対してオプション要求を実行して、どのリンクが利用可能であり、アクセスできないリンクを動的に無効にすることができます。
この問題に対する単一の回答はありません。要件に応じてさまざまなケースで異なるソリューションが機能します。
他のヒント
REST APIがロボットのブラウズを閲覧するためのウェブサイトであると考えてください。
Webサイトは、表示が許可されていないリンクを含むHTMLリソース(ページ)を返しますか?
それがそうかどうかにかかわらず、ウェブサイトの「ハイパーメディア」がどのようなものではありません。
しかし、同じリソースURLは認証されたユーザー
に応じて異なる表現を持つことができます。
ウェブサイトのホームページについても同じことを考えてみましょう。リソースは概念的な、ホームページは概念、変更のようなものです。
ログインしてログアウトされたビューのためのページのキャッシングにどのように対処するか?
第1の方法はそれらのリソースのキャッシングをバーリングすることです。すべてがキャッシュ可能でなければならないため、制約は単にリソースにそれに応じてラベルを付けることができるということです。
2番目は、REST APIにHTTPを使用している場合は、制御セマンティクス、またはヘッダーを使用しています。
https://developer.mozilla.org/en. -us / docs / web / http /ヘッダー/ Vary