Api RESTful设计:解析关系

Api RESTful设计:解析关系,api,rest,Api,Rest,我的问题基于这篇文章: 假设我有以下资源:用户和角色 单个用户可以通过api/users/{userId}检索,单个角色可以通过api/roles/{roleId} 单个用户的响应数据如下所示: Id: 1 Firstname: Alice Lastname: Henderson Email: alice@henderson.com Roles: api/users/1/roles 要获取此用户的角色,应用程序需要调用返回的urlapi/users/1/roles 对于显示1个用户,这种方法似

我的问题基于这篇文章:

假设我有以下资源:用户和角色

单个用户可以通过api/users/{userId}检索,单个角色可以通过api/roles/{roleId}

单个用户的响应数据如下所示:

Id: 1
Firstname: Alice
Lastname: Henderson
Email: alice@henderson.com
Roles: api/users/1/roles
要获取此用户的角色,应用程序需要调用返回的urlapi/users/1/roles

对于显示1个用户,这种方法似乎还可以。但是如果我想显示所有用户及其相应的角色,应用程序需要1次调用api/users和x次调用api/users/x/roles


如何改进此设计以检索多个用户并解析其角色关系?

您可以将API设计为接受一个或多个指定所需详细程度的查询参数。例如:

GET /api/users/1?expand=role(self, id, name)

{
    "id": 1
    "firstName": "Alice"
    "lastName": "Henderson"
    "email": "alice@henderson.com"
    "roles": [
        {
            "self": "api/roles/4"
            "id": 4
            "name": "Administrator"
        },
        {
            "self": "api/roles/7"
            "id": 7
            "name": "Uberuser"
        }
    ]
}

可以将API设计为接受一个或多个查询参数,这些参数指定所需的详细程度。例如:

GET /api/users/1?expand=role(self, id, name)

{
    "id": 1
    "firstName": "Alice"
    "lastName": "Henderson"
    "email": "alice@henderson.com"
    "roles": [
        {
            "self": "api/roles/4"
            "id": 4
            "name": "Administrator"
        },
        {
            "self": "api/roles/7"
            "id": 7
            "name": "Uberuser"
        }
    ]
}