1

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

我有一些项目,它们遵循基本的 CRUD 流程。我还有一些用户也遵循基本的 CRUD 流程。但是,我有一项将用户添加到项目的操作,但我不确定如何提出请求。

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

PUT /users/project/3

关于如何解决这个问题的任何建议?

4

2 回答 2

2

听起来好像用户可以有很多项目,一个项目可以有很多用户。在这种情况下,管理该关系最好通过一个连接表来完成,您可以将其命名为 Participants 之类的东西,它有一个 user_id 和一个 project_id。

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

POST /projects/:project_id/participants

有效负载将包含 user_id。

于 2012-06-24T17:53:07.700 回答
1

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

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

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

PUT /projects/(projectid)

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

您可能希望使用 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保存请求将触发(POST?PUT?)到 URL:

/myrestapi/projects/(cid)

用 post 数据表示项目的模型状态:

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

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

于 2012-06-24T05:56:09.507 回答