参考此API教程/说明: https://thinkster.io/tutorials/design-a-robust-json-api/getting-and-setting-user-data
本教程解释说,要“关注用户”,您可以使用:
POST /api/profiles/:username/follow
。
为了“取消关注用户”,您可以使用:
DELETE /api/profiles/:username/follow
。
用户个人资料最初拥有字段"following": false
。
我不明白为什么要创建/删除“后续”字段(POST / DELETE)而不是从true
更新为false
。我觉得好像我没有抓住实际发生的事情 - 我们不是简单地在true
和false
之间切换“跟随”的价值吗?
谢谢!
答案 0 :(得分:0)
我认为数据库层必须以稍微复杂的方式实现,而不仅仅是“跟随”的布尔列。
鉴于您有三个用户,其中一个用户"following": true
是什么意思?该用户是否遵循某些内容?仅这一点并不意味着用户正在关注所有其他用户,对吗?
数据库层可能包含(至少)两个不同的概念:用户和以下;用户包含有关用户的信息,以下内容指定用户彼此关注的内容。
假设我们有两个用户:
[
{"username": "jake"},
{"username": "jane"}
]
我们想说简跟随杰克,但不是相反。
然后我们需要一些东西来代表这个概念。我们称之为:
{"follower": "jane", "followee": "jake"}
当API讨论创建或删除以下内容时,这可能是他们想象的创建内容。这就是他们使用POST / DELETE而不仅仅是PUT的原因。它们不会修改用户对象,而是创建代表以下内容的其他对象。
他们在JSON API响应中有"following": true/false
部分的原因是,当您询问有关特定用户的信息时, as 其他用户之一,您想知道是否您作为用户跟随该特定用户。
所以,鉴于上面的例子,当jane要求提供关于jake的信息时,在GET /api/profiles/jake
,她会收到这样的信息:
{
"profile": {
"username": "jake",
"bio": "...",
"image": "...",
"following": true
}
}
然而,当 jake 会询问有关jane的个人资料信息时,他会得到此回复:
{
"profile": {
"username": "jane",
"bio": "...",
"image": "...",
"following": false
}
}
因此,他们列为API响应的信息不是数据库中实际存储的关于此特定用户的信息,它还包含一些根据提出问题的人计算的信息。
答案 1 :(得分:0)
使用microPUT肯定是一个合理的选择。我不认为任何人都能告诉你为什么随机API教程做出了某些设计决定。可能他们只需要一个人为的例子来使用POST / DELETE。
除非作者看到这个问题,否则我认为这是无法回答的。可以想象他们想要存储元信息,例如跟随状态变化的时间戳,但不受POST / DELETE与PUT的影响。