restful 资源关联关系API设计

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

/orgs/:orgId/privileges

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

采用 spring mvc 放在 OrgController

不知道这样对不对?

阅读 5.6k
2 个回答

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

个人感觉这样会更好一点

// OrgController
/orgs/:orgId

// EmployeesController
/orgs/:orgId/employees 

// EmployeesController
/employees/:employeeId

// PrivilegesController
/employees/:employeeId/privileges

// PrivilegesController
/orgs/:orgId/privileges
@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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题