Я разрабатываю API, а также потребляю его с помощью Backbone.js. Часть API будет включать операции поиска. Например, при поиске автомобилей у меня может быть что-то вроде:
http://api.mysite.com/search/cars?q=volvo
С позвоночником я вижу два варианта использования результатов.
Вариант 1: Поиск представляет собой коллекцию
var CarSearch = Backbone.Collection.extend({
model: Car,
initialize : function(models, options){
this.query = options.query;
},
url: function(){
return "http://api.mysite.com/search/cars?q="+this.query;
}
});
var volvos = new CarSearch([], {query:'volvo'});
volvos.fetch();
Вариант 2: поиск - это модель, и результатом является коллекция
var CarSearchResults = Backbone.Collection.extend({
model: Car
});
var CarSearch = Backbone.Model.extend({
defaults: {
"query":"",
"carSearchResults":null
},
url: function(){
return "http://api.mysite.com/search/cars?q="+this.get('query');
},
parse: function(resp,xhr){
resp.carSearchResults = new CarSearchResults(resp.carSearchResults);
return resp;
}
});
var volvoSearch = new CarSearch();
volvoSearch.set({query:'volvo'});
volvoSearch.save();
Каковы преимущества/недостатки этих вариантов? Есть ли способ создания этого позвоночника?
Я склоняюсь к варианту 2, потому что кажется более легким добавить что-то к ответу, например, к деталям разбиения на страницы, или к следующему URL-адресу. Но вариант 2 кажется более беспорядочным по-разному. Например, я бы сгенерировал идентификатор на сервере для модели поиска, когда он будет сохранен? Не думайте, что мне нужно получить эту модель по ID, удаление или обновление ее на самом деле не имеет смысла, потому что я не сохраняю ее.