骨干REST请求将用户添加到项目中?

时间:2012-06-24 05:21:15

标签: codeigniter rest backbone.js underscore.js

我正在设计一个遵循REST规范的应用程序,但我不确定如何构建以下内容。

我有项目,遵循基本的CRUD流程。我也有用户也遵循基本的CRUD流程。但是我有一个将用户添加到项目的操作,我不知道如何发出请求。

用户可以有多个项目,所以我认为它应该是某种PUT请求,但项目ID实际上并不是用户模型的一部分。

PUT /users/project/3

有关如何处理此事的任何建议?

2 个答案:

答案 0 :(得分:2)

听起来好像用户可以有很多项目而项目可以有很多用户。在这种情况下,最好通过一个连接表来管理这种关系,你可以将参与者命名为具有user_id和project_id的参与者。

然后,您可以选择是通过用户还是通过项目管理参与者。对我来说,管理你的项目参与者是有意义的,因为你正在创建一个新的参与者,这是一个POST。

POST /projects/:project_id/participants

有效负载将包含user_id。

答案 1 :(得分:1)

如果项目ID不是用户模型的一部分,那么这意味着用户ID数组是项目模型的一部分......对吗?所以我认为这适合将用户添加到项目中:

PUT /projects/(projectid)/users/(userid)

但是,如果服务的消费者(即Backbone)不需要这些URL,也许您不需要支持这些URL;也许你只想要一个端点来更新项目:

PUT /projects/(projectid)

并且您的Ajax帖子调用将包含用户列表,作为“更新此项目”请求的一部分。

您可能希望使用Backbone中的任一种形式的URL,具体取决于UI。 URL的第一种形式实际上仅对诸如“将用户x添加到项目y”之类的请求有用(例如,当管理员点击“将此用户添加到当前项目时”或其他任何内容时)。

URL的第二种形式是您可能用于更新项目批发的内容,其中可能包括用户列表,项目名称等;这就是“编辑项目”视图。

var ProjectModel = Backbone.Model.extend({
    defaults: {
        "project_name": "",
        "users: [0]
    },

    urlRoot: "/myrestapi/projects",

    url: function() {
        return this.urlRoot + "/" + this.cid;
    }
});

此模型上的Backbone save 请求会触发(POST?PUT?)到URL:

/myrestapi/projects/(cid)

使用表示项目模型状态的帖子数据:

{ "project_name": "foo", "users": [15, 18, 42] }

然后由您的REST服务触发服务器数据存储的更新...