2

用户基本上可以将其他用户添加为朋友。所以,我不是在创建另一个用户资源,而是链接两个资源。

问题

  1. 处理这个问题的最佳策略是什么?
  2. 这种情况下合适的动词是什么?

听说有一个LINK动词,好像很合适。

而且我还读到,我可以使用PATCH动词来对资源应用补丁。
如果是这样,我可以这样做吗

PATCH /users/{id}/friends
4

2 回答 2

3

您可能会考虑创建一个新对象。

如果您分离出一个friendship对象,您将能够在不更新用户的情况下创建和修改它们。每个友谊将有两个用户密钥。这也是一个悬挂有关友谊的额外信息的好地方,例如“朋友以来”的价值。

POST /friendships

{
     primaryUser: 43,
     secondaryUser: 3
     since: "03/16/2010"
}

201 CREATED
location: /friendships/635

然后可以编写对用户 43 的查询以包括用户 ID、友谊 ID 或嵌入对象的数组。

GET /users/43

200 SUCCESS
{
    id: 43,
    name: "john",
    friends: [3]
}

或者

200 SUCCESS
{
    id: 43,
    name: "john",
    friends: [635]
}

或者

200 SUCCESS
{
    id: 43,
    name: "john",
    friends: [
        {
             id: 635,
             primaryUser: 43,
             secondaryUser: 3,
             since: "03/16/2010"
        }
    ]
}

更新/删除的语义更加直接。“删除”友谊看起来DELETE比 aPATCHPUTimo 更好。

于 2012-09-14T15:25:08.110 回答
0

“链接资源”实际上只是意味着“更新一个资源以包含指向另一个资源的链接”。

这意味着您应该使用包含对资源 B 的新引用的新表示向资源 A 发出 PUT 或 POST。

如果它是双向关系,那么通过在资源 A 上进行 PUT/POST,您还应该在下次获取资源 B 时看到对 A 的引用。

于 2012-09-14T14:58:31.300 回答