【问题标题】:REST: Get query only changeable objectsREST:仅获取查询可变对象
【发布时间】:2019-06-16 02:07:50
【问题描述】:

我有一堆返回多种类型数据的 API。 所有用户都可以使用 GET rest api 查询所有数据。

少数用户也可以更改数据。 REST API 设计时常用的方法是什么,只查询当前用户可以更改的数据,但仍然允许api返回所有数据(用于显示模式)。

进一步解释:

该软件管理项目。所有用户(也可以匿名)都可以通过 api(我们称之为 GET api/projects)访问所有项目。 用户可以查看他参与的所有项目的列表,并且可以对其进行编辑。 api 应该返回完全相同的数据,但仅限于他参与的项目。

我应该创建一个附加参数,还是传递一个 http 标头,或者其他什么?

【问题讨论】:

  • 嗨 - 您是否返回属性以及可以包含“可编辑”(布尔)字段的数据字段?如果是这种情况,假设您能够通过您的授权机制识别用户及其各自的角色/权限,您可以将每个数据字段的“可编辑”设置为真或假。
  • 我已经添加了一些进一步的解释。添加可编辑不是一个选项,因为与他自己的对象相比,对象的总体积太低(如 1/100000)。这意味着将提取 100000 个对象以找到一个可编辑的对象。
  • 感谢您提供更多信息。我的意思是,如果您确实有一个可以识别可编辑项目的字段(例如“可编辑”),那么您可以像“api/projects?editable=true”那样构建您的 GET,以仅返回该给定用户的可编辑项目。如果这是一个系统专用 API,并且不向其他人公开,您还可以传递 'userId' 和 'editable' 参数进行过滤。

标签: rest api-design


【解决方案1】:

对此没有万能的答案,所以我会给你一个适合某些人的建议。

我不太喜欢创建具有“复杂访问控制”的资源。相反,我更愿意为不同的访问级别创建不同的资源。

如果您想为具有部分访问权限的人返回限制结果,最好创建反映这一点的新资源。

我认为这也有助于思考一个不被允许做所有事情的人的抽象角色。抽象可能不存在于每个属性中,但它作为业务规则存在于某处。

【讨论】:

    猜你喜欢
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 2016-05-27
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多