为我们的模型提供一些背景信息:一个组织拥有用户(具有不同的角色),而用户拥有博客文章。
我有一个用例,我需要使用组织中用户的帖子使用情况数据(即帖子,如博客帖子)在UI中填充两个表。一张表格汇总了按用户角色(例如管理员,编辑者和作家)分组的整个组织的总职位数。不过,另一张表将显示所有用户以及每个用户的帖子计数,而不论其角色是什么。
但是,此API端点也将公开,并由组织管理员用来确定帖子的用法,因此我们希望它尽可能直观。
我们已经有一个端点,可以返回有关用户的数据(电子邮件,姓名等)
格式类似于:
{
current_page: 1,
per_page: 50,
next_page: 2,
previous_page: null,
total_pages: 3,
total_count: 150,
users: [
{
id: 1,
name: "John Doe",
email: "email@example.com",
...
},
...
]
}
我们需要的汇总数据只是按用户角色分组的组织的职位数,以及每个用户的职位数(对于所有用户)。也就是说,用户在一段时间内发布的帖子数(将在URL参数中提供)。
我们已经将此想法反弹了一秒钟,并提出了一些替代方案,到目前为止,更有意义的选择是通过一个端点提供数据,该端点允许基于定义的聚合模式对数据进行聚合。
例如,我们可以执行以下操作来获取第一个表的信息,该表需要整个组织的汇总数据:
# /usage/posts?from=&to=&aggregation=user_role
{
usage: {
admin: {
post_count: admin_posts.count,
published_post_count: admin_posts.published.count
},
editor: {
post_count: editor_posts.count,
published_post_count: editor_posts.published.count,
},
writer: {
...
}
}
}
然后对于第二张表,该表需要包括组织中的所有用户及其职位数,我们可以按照以下方式进行操作:
# /usage/posts?from=&to=&aggregation=user(default)
{
current_page: 1,
per_page: 50,
next_page: 2,
previous_page: null,
total_pages: 3,
total_count: 150,
usage: [
{
id: user.id,
post_count: user.posts.count,
email: user.email,
name: user.name,
role: user.role,
...
},
{
id: user.id,
post_count: user.posts.count,
email: user.email,
name: user.name,
role: user.role,
...
},
...
]
}
这种有效载荷结构看起来直观吗?不仅是为了我们自己的使用并能够填充我们的UI,而且是为了让我们的用户从他们可以使用的数据中获取数据,只要他们认为合适即可。
感谢您的反馈和想法!