如果您有 REST API
即 hypermedia-driven
(HATEOAS) 您可以通过在响应 ( _links
) 中包含或省略链接来轻松更改客户端的行为。这使客户端能够完全忘记在 resource
的当前状态下可能进行的操作的测试权限。 (操作的链接是否存在)。
此外,如果当前用户没有查看它的权限,您可以在响应中省略属性。
这样授权完全在服务器上完成(并控制有资格执行/查看的操作和属性)。
但是如果我想要一个 read-only
怎么办?属性(property)? REST
没问题API
如果请求中存在该属性,则忽略该属性( _POST_
或 _PUT_
)。它只是不会被保存。但是客户端如何区分写入和只读属性以向用户呈现适当的控件(例如 HTML
中的禁用输入字段)?
我们的目标是永远不会拥有 client request
一个用户的权限,但要有完全的资源驱动client/frontend
.
任何帮助是极大的赞赏 :-)
最佳答案
如果我误解了你的问题,我先道歉。话虽这么说...
But how can a client distinguish between write and read-only properties to present the user appropriate controls (like a disabled input field in HTML)
嗯,对此有多种解决方案。我个人能想到的最简单的方法是使每个属性成为一个具有以下简单结构的对象:
...
someProperty: {
value: 'some value',
access: 'read-only'
},
someOtherProperty: {
value: 'some value',
access: 'write'
}
...
显然,您可以通过如何表示属性的“访问”级别(使用枚举、 bool 值、将
access
更改为 isReadOnly
或其他方式)来获得任意创意。之后,使用 API 的人现在知道他们是否为只读。如果他们将“只读”属性的“写入”值作为 POST 有效负载的一部分提交,那么他们应该期望得到 403 响应。
编辑:
如果您无法以这种方式更改属性,您仍然可以通过多种其他方式实现此目的:
归根结底,您只需要一种方法来映射具有访问级别的属性。但是,这取决于您对 api 的限制和要求,您可以进行哪些更改,以及您的客户和业务要求可接受的内容。
关于rest - 如何在 REST Api 中表示只读属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31593955/