休息服务应该 return 一个包含其他实体或实体本身 ID 的实体吗?

Should a rest service return an entity that contains ids to other entities or the entities themselves?

我不确定以前是否有人回答过这个问题,但我不知道如何搜索此类内容,所以我要在这里问一下。例如,如果我有一个名为 User 的实体,看起来像这样:

 class User
 {
     int id; 
     string name;
     int roleId;
 }

和一个名为 Role

的实体
 class Role
 {
     int id; 
     string name;
     string[] permissions;
 }

一个用户包含一个角色的id。如果我通过休息 api 请求用户,是否应该像这样 return 使用角色的 ID 编辑用户:

{
    "id": 1,
    "name": "user"
    "roleId": 1
}

然后,如果我需要获得该角色,我应该发送另一个 api 调用来获取该特定角色。或者我应该将角色映射到用户并 return 像这样:

{
    "id": 1,
    "name": "user"
    "role": {
       "id": 1,
       "permissions": [
          "something here"  
       ]
    }
}

在这种情况下,我不需要发送另一个请求,但我可能不需要该角色。

取决于受众,例如内部消费,是的,id 很好,允许他们根据需要构建多个查询。

最终,如果您想针对您的受众进行定制,而不是将每个数据排列作为休息端点,请查看 GraphQL 消费者可以根据自己的需求定制响应。