我正在设计一个遵循 REST 规范的应用程序,但我不确定如何构建以下内容。
我有一些项目,它们遵循基本的 CRUD 流程。我还有一些用户也遵循基本的 CRUD 流程。但是,我有一项将用户添加到项目的操作,但我不确定如何提出请求。
一个用户可以有多个项目,所以我认为它应该是某种 PUT 请求,但项目 ID 并不是用户模型的一部分。
PUT /users/project/3
关于如何解决这个问题的任何建议?
我正在设计一个遵循 REST 规范的应用程序,但我不确定如何构建以下内容。
我有一些项目,它们遵循基本的 CRUD 流程。我还有一些用户也遵循基本的 CRUD 流程。但是,我有一项将用户添加到项目的操作,但我不确定如何提出请求。
一个用户可以有多个项目,所以我认为它应该是某种 PUT 请求,但项目 ID 并不是用户模型的一部分。
PUT /users/project/3
关于如何解决这个问题的任何建议?
听起来好像用户可以有很多项目,一个项目可以有很多用户。在这种情况下,管理该关系最好通过一个连接表来完成,您可以将其命名为 Participants 之类的东西,它有一个 user_id 和一个 project_id。
然后您可以选择是通过用户还是通过项目来管理参与者。对我来说,管理你的项目参与者是有意义的,因为你正在创建一个新的参与者,所以它是一个 POST。
POST /projects/:project_id/participants
有效负载将包含 user_id。
如果项目 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 服务触发对服务器数据存储的更新...