友谊系统的 RESTful URL 设计

Umu*_*rin 2 rest social-networking restful-url social-network-friendship

我是公司的 API 开发人员。我们正在开发一个社交网络。我们正在使用友谊系统。我们正在使用面向API的系统。我将要编写的 API 将被我们正在开发的每个平台使用。

我通常有一个用户资源,并且使用友谊表来跟踪友谊:

+-----------+------------------+------+-----+---------------------+----------------+
| Field     | Type             | Null | Key | Default             | Extra          |
+-----------+------------------+------+-----+---------------------+----------------+
| id        | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| sourceId  | int(11)          | NO   | MUL | NULL                |                |
| targetId  | int(11)          | NO   |     | NULL                |                |
| status    | tinyint(1)       | NO   |     | 0                   |                |
| seen      | tinyint(1)       | NO   |     | 0                   |                |
| createdAt | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| updatedAt | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| deletedAt | timestamp        | YES  |     | NULL                |                |
+-----------+------------------+------+-----+---------------------+----------------+
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试思考应该如何实现必要的 URI。但我不知道应该如何准确地实现它。我只能想到这个想法,却无法付诸实践:

假设我有 2 个用户,一个是usernameof john,另一个是usernameof jane

jane想要添加john为好友,当需要添加好友时,她会发送一个POST请求:

POST /users/john/friendships
Run Code Online (Sandbox Code Playgroud)

john看到这一点,想要否认或证实它,为此,我想出了两个不同的想法;第一个是:

PUT /users/jane/friendships?action=(deny|confirm)
Run Code Online (Sandbox Code Playgroud)

或第二个是:

PUT /users/jane/friendships/<friendshipId>?action=(deny|confirm)
Run Code Online (Sandbox Code Playgroud)

按照惯例,第二个似乎更适合我,但后来我认为我可以这样做

PUT /friendships/<friendshipId>?action=(deny|confirm)
Run Code Online (Sandbox Code Playgroud)

所以,我被困在这里了。我想到的就是这些例子。我不认为这些是正确的。

tue*_*tre 5

John 可以将 Jane 添加为好友(包括带有相关信息的请求正文):

POST /users/john/friends

...或者,约翰可以更新一些有关他与简的友谊的信息(同样,使用请求正文)

PUT /users/john/friends/jane

...或者,约翰可以与简“解除好友关系”。

DELETE /users/john/friends/jane