使用将支持多种超媒体类型和身份验证的 REST 框架。我不确定如何处理的一件事是资源中的敏感值。例如,如果我要在 API 中包含用户管理,我需要一种方法向客户端公开密码字段,但不显示实际的密码哈希。信用卡也是一样。如果我不这样做,它将违反超媒体约束,因为这些领域的知识会变得带外,并使我的 HATEOAS 损坏。
这是我遇到的一个实际用例:
该项目是一个展示他们的人员目录,以便其他人可以雇用他们。有两种类型的用户:有个人资料的和没有个人资料的。围绕资源的设计将是/users/{userid}
针对用户的,/users/{userid}/profile
或者/profile/{profileid}
将包括一个返回用户的链接,以便客户端可以获得用户名等信息。此外,用户可以将信用卡存储在/users/{userid}/creditcards/{creditcardid}
.
要显示用户的个人资料,您还需要用户资源来访问名称等。我们不希望在用户资源或信用卡链接上公开用户密码。我想我可以毫无问题地隐藏信用卡链接,但我不确定密码字段。我应该只为授权用户公开它,而不是在其他用户模型上公开吗?我应该提到,GET
除非经过身份验证和授权,否则仅允许用户使用。
一个强调这一点的奇怪边缘情况是您可以部分访问更改的对象。假设您是低级别管理员,有权更改用户的姓名和地址,但不能更改密码。由于您无权访问,因此无法公开密码字段。如何PUT
对我没有所有字段的资源执行操作?我应该只PATCH
在这些情况下使用吗?
TL;DR:如何正确隐藏/公开 REST API 中的字段并遵循超媒体约束?