【发布时间】:2024-11-18 03:40:01
【问题描述】:
我正处于一个十字路口,决定标签应该是它们自己的资源还是笔记的嵌套属性。这个问题有点涉及到RESTful设计和数据库存储。
上下文:我有一个笔记资源。用户可以有很多笔记。每个笔记可以有很多标签。
功能目标:
我需要创建路线来执行以下操作:
1)获取所有用户标签。类似于:GET /users/:id/tags
2) 删除与笔记关联的标签。
3) 为特定笔记添加标签。
数据/绩效目标
1) 获取用户标签应该很快。这是为了“自动建议”/“自动完成”。
2)防止重复(尽可能)。为了能够按标签查询数据,我希望尽可能多地重用标签。例如,当标签“superhero”已经存在时,我想减轻用户键入标签(例如“superheroes”)的情况。
话虽如此,在我看来,在笔记资源上存储标签有两种方法:
1) 标记为嵌套属性。例如:
type: 'notes',
attributes: {
id: '123456789',
body: '...',
tags: ['batman', 'superhero']
}
2) 标签作为自己的资源。例如:
type: 'notes',
data: {
id: '123456789',
body: '...',
tags: [1,2,3] // <= Tag IDs instead of strings
}
上述任何一种方法都可以,但我正在寻找一种能够实现可扩展性和数据一致性的解决方案(想象一百万个笔记和一千万个标签)。在这一点上,我倾向于选项#1,因为它更容易处理代码,但不一定是正确的选择。
我很想听听关于不同方法的一些想法,特别是因为我找不到关于这个主题的类似问题。
更新 谢谢你的回答。对我来说,最重要的事情之一是确定为什么使用其中一种是有利的。我希望答案包括一些赞成/反对清单。
【问题讨论】:
-
您是在存储在数据库中还是在从静止返回输出时谈论这个?
-
标签除了名字和ID之外还有其他信息吗?
-
标签只包含一个字符串值。这个问题涉及 RESTful 设计和数据库存储 - 我已经更新了我的问题以反映。
标签: rest tags api-design