2013-06-25 3 views
4

Я построил простую модель пользователя в BackboneBackbone Модель пользователя с несколькими путями обновления

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() на модели будет выдавать запрос PUT на /api/user/:id, который прекрасно.

Однако на переднем конце я хочу 3 формы - updatePersonalDetails, updateUserName, updatePassword.

С моей текущей реализацией все они будут использовать одну и ту же модель и все save() с той же конечной точкой /api/user/:id. Моя проблема в том, что я не знаю, какую форму пользователь разместил.

Какое лучшее решение для этой проблемы, хотя и соответствует стандартам RESTful? Имея 3 отдельные модели - UserDetailsModel, UserPasswordModel и т. Д.? Или просто сделать объемное ОБНОВЛЕНИЕ на всей модели, независимо от того, какую форму он разместил.

+0

Интересный вопрос, это один из моих личных бифов с REST, как это часто преподносится: мы в основном давая доступ к базе данных вставок, обновлений и удалений через интерфейс HTTP. – mtsr

+0

@mtsr, это плохой общий взгляд на API REST. Вы всегда должны требовать, чтобы пользователь вошел в систему, отправив '401 Unauthorized', если это не так, и затем проверьте их разрешения, отправив' 403 Forbidden', если это так. – gustavohenke

+0

@redeye, я думаю, вам не нужно «знать», какая форма была отправлена ​​в модели. Я считаю, что лучше всего назвать разные методы вашей модели, которые будут запускать сохранение по-разному, только отправляя соответствующие данные. Я не уверен, но я считаю, что это REST-совместимый. – gustavohenke

ответ

2

Все вопросы, касающиеся разделения моделей и модели BULK в комментариях к вопросу, мне нечего туда добавлять.

Что касается вашей необходимости понимания источника обновления формы запроса, вы можете использовать параметры строки запроса:

Просто POST/API/пользователь/1 формы = my_special_form

В позвоночнике вам просто нужно сохранить модель с опцией URL-адрес

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