当检索多个项目与单个项目时,RESTful服务是否应返回不同的数据

时间:2017-06-23 04:46:06

标签: rest

使用REST API,是否期望为特定资源返回的数据始终表示完全相同?

例如,对于资源列表具有以下内容是违反规范或惯例:

GET /api/users

{
    userId: 1,
    username: 'User1'
},
{
    userId: 2,
    username: 'User2'
}

但是在调用单个资源时,请返回以下内容:

GET /api/users/1

{
    userId: 1,
    username: 'User1',
    email: 'user1@example.com',
    firstName: 'User',
    lastName: 'One'
}

我以前只是通过网络发送我需要的数据,所以当我不打算使用资源时,我会感到很奇怪。

我担心的一个例子是,当使用资源ID和名称列表填充下拉列表时,可能会发送大量不必要的数据。

1 个答案:

答案 0 :(得分:2)

在列出资源与加载单个资源时,有一个缩写的数据结构是完全可以的 - 事实上,我认为这是预期的行为,我见过/使用的大多数RESTful API都使用这种形式。毕竟,如果你在列出资源时发送所有数据,为什么你甚至需要一个独立的资源加载器,除了有人猜测资源ID并为它们检索数据?

唯一的问题是列表应该将数据缩减多少,并且归结为服务的典型用例 - 如果只是在深入挖掘数据之前填充用户名列表,则ID和用户名更多够了。