【问题标题】:Backbone User Model with multiple update paths具有多个更新路径的主干用户模型
【发布时间】:2013-06-22 02:36:27
【问题描述】:

我在 Backbone 中建立了一个简单的用户模型

define([
  'underscore',
  'backbone'
], function(_, Backbone) {

   var UserModel = Backbone.Model.extend({
      urlRoot: '/api/user',
      idAttribute: '_id',
      defaults: {
         userName: '',
         password: ''
         personalDetails: {
         title: '',
         name: {
           firstName: '',
           lastName: ''
         },
         gender: '',
         dob: ''
       }
    }
 });

 return UserModel;
});

在模型上调用 save() 将向 /api/user/:id 发出 PUT 请求,这很好。

但是,在前端我想要 3 个表单 - updatePersonalDetailsupdateUserNameupdatePassword

在我当前的实现中,这些都将使用相同的模型,并且所有save() 都使用相同的端点/api/user/:id。我的问题是我不知道用户发布了哪个表单。

在仍符合 RESTful 标准的同时,解决此问题的最佳方法是什么?有 3 个独立的模型 - UserDetailsModelUserPasswordModel 等?或者只对整个模型进行批量更新,无论用户发布哪种形式。

【问题讨论】:

  • 有趣的问题,这是我个人对 REST 的不满之一,因为它经常出现:我们基本上是通过 HTTP 接口访问数据库插入、更新和删除。
  • @mtsr,这是对 REST API 的整体看法。您应该始终要求用户登录,如果不是,发送401 Unauthorized,然后检查他们的权限,如果是这种情况,发送403 Forbidden
  • @redeye,我认为你不需要“知道”模型中发送了什么表格。我相信最好的办法是调用模型的不同方法,这会以不同的方式触发保存,只发送相关数据。我不确定,但我相信这符合 REST。
  • @gustavohenke 当然,您仍然可以保护您的 REST API,但是拥有比特定模型、模型实例或自定义字段检查的更新更细粒度的过滤器不是很好吗?例如。类似界面的更多命令,您不会将 PUT 发送到 /user/1 而是 /user/1/changeAddress?
  • 感谢您的回复。看来我可以发出 PATCH 请求。例如this.model.save(attr, {PATCH: true});这只会将提供的 attr 发送到服务器。这提出了另一个问题——我需要在服务器上进行表单验证,所以我仍然需要了解用户发布的表单。我想避免嗅探服务器上的 req.body

标签: javascript node.js backbone.js


【解决方案1】:

在问题 cmets 中讨论了关于模型分离与模型 BULK 的分配,我没有什么要补充的。

关于你需要了解UPDATE请求表单源,可以使用查询字符串参数:

只需发布 /api/user/1?form=my_special_form

在主干中,您只需要使用 url 选项保存模型

model.save({}, {
  url: model.url() + "?form=my_special_form"
});

【讨论】:

    猜你喜欢
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多