首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在REST Api中表示只读属性

如何在REST Api中表示只读属性
EN

Stack Overflow用户
提问于 2015-07-23 17:12:21
回答 1查看 4K关注 0票数 7

如果您有一个REST API,即hypermedia-driven (hypermedia-driven),您可以通过在响应(_links)中包含或省略链接来轻松地更改客户端的行为。这使客户端完全忘记了测试resource当前状态下可能的操作的权限(是否存在到操作的链接)。

此外,如果当前用户没有查看该属性的权限,则可以在响应中省略属性。

通过这种方式,授权完全在服务器上完成(并控制符合执行/视图条件的操作和属性)。

但是,如果我想拥有一个read-only属性呢?如果REST API存在于请求中(_POST__PUT_),则忽略该属性是没有问题的。就是救不了你。但是,客户端如何区分写属性和只读属性,以显示用户适当的控件(如HTML中禁用的输入字段)?

目标是永远不要让client request拥有用户的权限,而是拥有一个完全由资源驱动的client/frontend

如有任何帮助,将不胜感激:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-25 19:01:02

如果我误解了你的问题,我先道歉。既然这么说..。

但是,客户端如何区分写属性和只读属性,以显示用户适当的控件(如HTML中禁用的输入字段)

对此有多种解决方案。我个人能想到的最简单的方法是使每个属性成为一个具有以下简单结构的对象:

代码语言:javascript
复制
    ...

    someProperty: {
        value: 'some value',
        access: 'read-only'
    },
    someOtherProperty: {
        value: 'some value',
        access: 'write'
    }
    ...

显然,通过如何表示属性的“访问”级别(使用枚举、布尔值、将access更改为isReadOnly等),您可以获得任意的创造性。

在那之后,使用API的人现在知道他们是只读的还是非只读的。如果他们提交一个“只读”属性的“写”值作为POST有效负载的一部分,那么他们应该期望得到一个403响应。

编辑:如果您不能以这种方式更改属性,还有许多其他方法可以做到这一点:

  • 编写说明每个属性有哪些访问权限的文档
  • 创建用户可以提交一个或多个属性的路由,以便接收一个响应,该响应指示每个属性的访问级别(响应:{ propName:‘只读’,propName2:‘写’等等)。
  • 返回propertyAccess映射作为响应的一部分(将属性映射到访问级别)。

最后,您只需要一种方法来映射具有访问级别的属性。然而,这取决于您对api的限制和需求,您可以进行哪些更改,以及您的客户端和业务需求都可以接受什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31593955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档