rest - 具有多个公司或组织的系统的REST API设计

标签 rest grails

我看到的大多数示例都实现了REST URL模式,例如http://www.app.com/books/1来访问ID为1的书,或者http://www.app.com/books来访问所有书。

很好,但是通常我会开发支持多个公司的应用程序。例如,公司ABC有2个用户,公司DEF有2个用户。公司 ABC 的用户创建了ID为100 的图书。现在,当来自 DEF 公司的用户打来RESTful call 时:
http://www.app.com/books/100
需要有一个访问异常,或者
http://www.app.com/books
只会列出所有属于DEF的图书(而不是ID为100的新图书)。对于许多实体(例如Book),公司ID是表的一部分,但对于其他实体却并非如此。例如,如果一本书中的一个章节有一个REST操作,则http://www.app.com/chapter/333章节表将具有对该书的外键引用,而不是该公司的外键引用。

管理该资源访问的最佳实践是什么?如果来自DEF的某人试图访问ABC的章节,则必须构造一个查询以将该章节加入书中,以验证公司ID是否有效。

我正在使用Grails 3.x,其中大多数逻辑都是抽象的,并且认为“自动”发生。因此,将自动返回用于特定书本ID的URL,并且列出所有请求的请求将返回数据库中的每本书。看来,要继续进行下去,我将不得不覆盖大多数这种自动功能并实现我自己的安全性,也许是在服务层中,在该层中,公司ID是每个操作的必需参数。听起来合理吗?

是否存在针对此类事情的既定最佳实践?

最佳答案

不知道它是否适合您的需求,但是有趣的是,有一个Burt Beckwith编写的ACL插件:

Spring Security ACL Plugin

关于rest - 具有多个公司或组织的系统的REST API设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36830050/

相关文章:

grails - 属性必须是有效的日期

excel - 读取 XLSX 文件并将数据存储在 Grails 中的有效方法

data-binding - Grails 将请求参数绑定(bind)到枚举

grails - Grails安全过滤器和/index.gsp

rest - 检索特定组的 key 斗篷组 ID

node.js - NGINX:使用 1 个域名为多个端口设置 SSL 证书

http - 使用 OneToMany 响应资源上的创建操作的正确 HTTP 状态代码是什么

python - 如何故意在Python/Flask中引起400错误请求?

ajax - Grails:Ajax响应为空

java - JerseyTest如何使用SpringBoot的上下文进行测试