restful 资源关联关系API设计

发布于 2022-08-31 20:21:56 字数 183 浏览 8 评论 0

比如公司与权限,公司下的员工与权限的关系

/orgs/:orgId/privileges

/orgs/:orgId/employees/:employeeId/privileges

采用 spring mvc 放在 OrgController

不知道这样对不对?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情定在深秋 2022-09-07 20:21:56

链有点长,如果org相关的都要放到这个controller中就是导致这个文件越来越复杂

个人感觉这样会更好一点

// OrgController
/orgs/:orgId

// EmployeesController
/orgs/:orgId/employees 

// EmployeesController
/employees/:employeeId

// PrivilegesController
/employees/:employeeId/privileges

// PrivilegesController
/orgs/:orgId/privileges
新一帅帅 2022-09-07 20:21:56
@ReqeustMapping("/org")
class OrgController

@ResponseBody
@ReqeustMapping("/{orgId}/privileges")
public List<Privilege> privileges(@PathVariable String orgId)

@ReqeustMapping("/employee")
class EmployeeController

@ResponseBody
@ReqeustMapping("/{employeeId}/privileges")
public List<Privilege> privileges(@PathVariable String employeeId)

当题主同学问到某公司下某个员工的权限的时候,我就感觉上面这些都没什么必要了。

先把enable-matrix-variables设为true

<mvc:annotation-driven enable-matrix-variables="true" />

不用那么多方法来提供privilege,只要一个方法:

@RequestMapping(value = "/privileges/{orgId}", method = RequestMethod.GET)
@ResponseBody
public List<Privilege> privileges(
         @PathVariable String orgId
        , @MatrixVariable(required = false) String userId) {
    List<Privilege> privileges = new ArrayList<>();

    //something

    return privileges;
}

Url可以是:/privileges/8866
或者 /privileges/8866;userId=0001

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文