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

标签 rest spring-mvc hateoas spring-hateoas hypermedia

如果您有 REST APIhypermedia-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 响应。

编辑:
如果您无法以这种方式更改属性,您仍然可以通过多种其他方式实现此目的:
  • 编写文档,解释每个属性的访问权限
  • 创建一个用户可以提交 1 个或多个属性的路由,以便接收指示每个属性访问级别的响应(响应:{ propName:'只读',propName2:'写入'等)
  • 返回一个 propertyAccess 映射作为响应的一部分(将属性映射到访问级别)。

  • 归根结底,您只需要一种方法来映射具有访问级别的属性。但是,这取决于您对 api 的限制和要求,您可以进行哪些更改,以及您的客户和业务要求可接受的内容。

    关于rest - 如何在 REST Api 中表示只读属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31593955/

    相关文章:

    rest - API 开发 : When to return a BAD REQUEST HTTP Status Code (REST)

    java - 无法读取架构文档 'http://www.springframework.org/schema/security/spring-security-4.0.xsd'

    java - Spring和JSP文件的动态包含

    json - 为什么仅为 POST 请求/201(已创建)响应设置 HTTP 位置 header ?

    CXF JAX-RS 服务 - HATEOAS

    java - JAXRS + JerseyTest 测试 REST 服务

    java - REST RequestParam 可选参数

    rest - 在 RESTful Web API 上进行 API 测试的一般建议

    java - 将 Xml 请求转换为 Spring Boot 对象

    java - 如何在不使用带有 spring hateoas 的@EnableHypermediaSupport 的情况下启用 HAL 渲染?