友谊系统的RESTful URL设计

时间:2013-07-04 17:34:51

标签: rest social-networking restful-url social-network-friendship

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

我经常使用User资源,我正在使用友谊表来跟踪友谊:

+-----------+------------------+------+-----+---------------------+----------------+
| 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                |                |
+-----------+------------------+------+-----+---------------------+----------------+

现在,我正在考虑如何实现必要的URI。但我无法理解我应该如何实现它。我只能提出这个想法,并且无法推进它:

假设我有2个用户,其中usernamejohn,另一个用usernamejane

jane想要将john添加为朋友,何时这样做,她会发送POST个请求:

POST /users/john/friendships

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

PUT /users/jane/friendships?action=(deny|confirm)

或第二个是:

PUT /users/jane/friendships/<friendshipId>?action=(deny|confirm)

传统上,第二个似乎更适合我,但我认为我可以做到

PUT /friendships/<friendshipId>?action=(deny|confirm)

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

1 个答案:

答案 0 :(得分:3)

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

POST /users/john/friends

......或者,John可以更新一些关于他与Jane的友谊的信息(再次,请求机构)

PUT /users/john/friends/jane

......或者,约翰可以“与Jane”取消联系。

DELETE /users/john/friends/jane