为什么使用DELETE/POST而不是PUT来'unfollowing/following'用户?



参考此 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。我觉得我好像没有掌握实际发生的事情——我们不是简单地在truefalse之间切换"关注"的价值吗?

谢谢!

我认为数据库层必须以稍微复杂的方式实现,而不仅仅是使用用于"跟随"的布尔列。

假设您有三个用户,其中一个用户"following": true意味着什么?该用户是否在关注某些内容?仅凭这一点并不意味着用户正在关注所有其他用户,对吗?

数据库层可能(至少)由两个不同的概念组成:用户和关注者;用户包含有关用户的信息,关注者指定用户彼此关注的内容。

假设我们有两个用户:

[
{"username": "jake"},
{"username": "jane"}
]

我们想说简在追随杰克,但不是相反。

然后我们需要一些东西来代表这个概念。让我们称之为以下内容:

{"follower": "jane", "followee": "jake"}

当 API 谈论创建或删除以下内容时,这可能是他们想象的正在创建的。这就是为什么他们使用POST/DELETE而不仅仅是PUT。它们不会修改用户对象,而是创建表示以下内容的其他对象。

他们的 JSON API 响应中具有"following": true/false部分的原因是,当您作为其他用户之一询问有关特定用户的信息时,您想知道您作为用户是否关注该特定用户。

所以,给定上面的例子,当简询问有关杰克的信息时,在GET /api/profiles/jake,她会收到这样的东西:

{
"profile": {
"username": "jake",
"bio": "...",
"image": "...",
"following": true
}
}

但是,当杰克询问有关简的个人资料信息时,他会得到以下回复:

{
"profile": {
"username": "jane",
"bio": "...",
"image": "...",
"following": false
}
}

因此,他们作为 API 响应列出的信息并不是数据库中实际存储的有关此特定用户的信息,它还包含一些根据提问者计算的信息。

使用 microPUT 肯定是一个合理的选择。我认为没有人能够告诉你为什么随机的API教程会做出某些设计决策。可能他们只需要一个人为的例子来使用POST/DELETE。

除非作者看到这个问题,否则我想它是无法回答的。可以想象,他们想要存储元信息,例如跟随状态更改的时间戳,但这不受 POST/DELETE 与 PUT 的影响。

相关内容

  • 没有找到相关文章

最新更新