Как спроектировать поиск REST с помощью backbone

Я разрабатываю 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 кажется более запутанным в нескольких отношениях. Например, буду ли я генерировать идентификатор на сервере для модели поиска при ее сохранении? Не думайте, что мне нужно получить эту модель по идентификатору, удаление или обновление ее также не имеет смысла, потому что я ее не сохраняю.

15
задан user1385729 19 June 2012 в 17:48
поделиться