[英]Using REST API for lookup lists dependant on context
我目前正在尝试确定解决我在设计REST API时遇到的问题的最佳方法。
简化方案是我的Web应用程序有两个资源,例如部门和员工。 两者都在业务层中受到安全控制。
可以存在一个有权访问员工但不能访问部门的用户,但是,当该用户编辑员工时,他们需要能够从下拉列表中选择该员工的部门(类似地,他们可能具有要过滤的员工列表)按部门)。
通常,该用户将无权访问部门对象,因此将无法调用/ department /,但是在编辑员工的情况下,他们需要部门列表。
建议的处理方式是什么,我将在/ employee /的每个GET上返回部门列表,还是会创建另一个由员工和部门对象组合而成的资源(部门是部门的完整列表)?
我目前无法更改对象的安全性,因为这在应用程序逻辑中已根深蒂固。
有人有想法吗?
问候,加里
创建一个名为“ DepartmentList”的新资源
注意 :我认为复数名称更好。
您必须考虑什么会使您的用户(开发人员)的生活变得更轻松。
合并的资源将“污染”您的api。 您的api将公开/ employees,/ departments和/ employeeDepartments。 我认为后者不应该在层次结构中那么高。
用户使用起来也会有些复杂:
“要编辑员工,您需要设置一个部门,但是该部门并不总是在/ department中可用,因此最好从employeeDepartments中获得它。”
考虑一下您的员工对象:GET / employees / 123
employee:{
name: John,
...
department: {
id: ID
--a subset of data--
}
}
数据的子集应足以对没有权限的用户进行操作,而有权访问的用户可以在/ departments / ID上进行操作。
现在,如何获取可用选项列表?
我过去常常提供一个“特殊”操作/ new,在那里我提供了一个“表单”,用户可以将其用作发布和创建新资源的模板。 这不是采用的Rest“标准”,而是HATEOAS友好的-确实有助于发现您的api。
因此,GET / employees / new可以打印
employee:{
name: "",
...
department: [{ id: 1, --subset of data-- },{ id: 2, --subset of data-- }.. ]
}
格式上有一些约定(例如:用户需要知道它只需要选择一个部门)。 但这是一个新的空洞讨论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.