首页 > restful 资源关联关系API设计

restful 资源关联关系API设计

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

/orgs/:orgId/privileges

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

采用 spring mvc 放在 OrgController

不知道这样对不对?


链有点长,如果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

【热门文章】
【热门文章】