複数のハイパーメディア タイプと認証をサポートする REST フレームワークに取り組んでいます。処理方法がよくわからないのは、リソース内の機密値です。たとえば、API にユーザー管理を含める場合、パスワード用のフィールドがあることをクライアントに公開する方法が必要になりますが、実際のパスワード ハッシュは表示されません。クレジットカードでも同じです。そうしないと、フィールドの知識が範囲外になり、HATEOASが壊れてしまうため、ハイパーメディアの制約に違反します。
私が遭遇した実際のユースケースは次のとおりです。
プロジェクトは、他の人が彼らを雇うことができるように彼らを紹介する人々のディレクトリです. ユーザーには、プロファイルを持つユーザーと持たないユーザーの 2 種類があります。リソース周辺の設計は/users/{userid}
ユーザー向けであり、ユーザー/users/{userid}/profile
へ/profile/{profileid}
のリンクが含まれているため、クライアントはユーザーの名前などを取得できます。また、ユーザーは にクレジット カードを保存できます/users/{userid}/creditcards/{creditcardid}
。
ユーザーのプロファイルを表示するには、名前などにアクセスできるユーザー リソースも必要です。私たちが望んでいないのは、ユーザー リソースやクレジット カード リンクでユーザーのパスワードを公開することです。問題なくクレジット カード リンクを非表示にできると思いますが、パスワード フィールドについてはわかりません。許可されたユーザーに対してのみ公開する必要がありますが、他のユーザー モデルでは公開しないでください。認証および承認されていない限り、ユーザーに対してのみGET
許可されることに注意してください。
これを強調する奇妙なエッジケースの 1 つは、部分的にアクセスして変更できるオブジェクトです。あなたが、ユーザーの名前とアドレスを変更するアクセス権を持っていたが、パスワードを変更できなかった低レベルの管理者だったとします。アクセス権がないため、パスワード フィールドを公開できません。PUT
すべてのフィールドを持っていないリソースに対してどのようにすればよいですか? そのような場合に使用する必要がPATCH
ありますか?
TL;DR: REST API でフィールドを適切に非表示/公開し、ハイパーメディアの制約に従うにはどうすればよいですか?