【问题标题】:RESTful URL design for a Friendship System友谊系统的 RESTful URL 设计
【发布时间】:2013-07-04 17:34:51
【问题描述】:

我是我公司的一名 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                |                |
+-----------+------------------+------+-----+---------------------+----------------+

现在,我正在考虑如何实现必要的 URI。但我不知道我应该如何准确地实现它。而我只能想出这个想法,并不能把它付诸实施:

假设我有 2 个用户,一个是 username 的 john,另一个是 username 的 jane。

jane想加john为好友,什么时候加,她发了POST请求:

POST /users/john/friendships

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

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

或第二个是:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    POST /users/john/friends

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

    PUT /users/john/friends/jane

    ...或者,约翰可以“取消”简的朋友。

    DELETE /users/john/friends/jane

    【讨论】:

    • 感谢您的回复 :) 但这是您会做的方式,还是完全 RESTful 的方式?
    • 嗯,没有“REST API”是真正的“完全 RESTful”,因为它们都需要事先了解一些 API 知识,其中 REST 描述了可以从根 URI 开始完全导航和使用的应用程序。但我回答的选项与 HTTP 动词及其基本概念有关,而这正是这些 API 真正努力的目标。
    • 是的,经过一番思考,我也想到了,使用/friends而不是/friendships。当然,在我说我知道 REST 之前,我需要做更多的研究。无论如何,非常感谢您的意见。
    • 顺便说一句,当两个用户都互相向他们的朋友发帖时,可以认为友谊已得到确认。
    猜你喜欢
    • 1970-01-01
    • 2016-09-27
    • 2014-09-22
    • 2010-12-30
    • 2012-10-28
    • 2015-01-25
    • 2010-12-22
    • 1970-01-01
    • 2011-08-24
    相关资源
    最近更新 更多