Estoy diseñando una API y también consumiéndola con Backbone.js. Parte de la API incluirá operaciones de búsqueda. Por ejemplo en la búsqueda de coches, que podría tener algo como:Cómo diseñar una búsqueda REST con backbone
http://api.mysite.com/search/cars?q=volvo
Con columna vertebral, puedo ver dos opciones para el consumo de los resultados.
Opción 1: Una búsqueda es una colección
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();
Opción 2: Una búsqueda es un modelo, y los resultados son una colección
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();
¿Cuáles son las ventajas/desventajas de estas opciones ? ¿Hay una forma básica de diseñar esto?
Me estoy inclinando hacia la opción 2 porque parece más fácil agregar cosas a la respuesta como detalles de paginación, o una próxima url. Pero la opción 2 parece más desordenada de dos maneras. Por ejemplo, ¿generaría una ID en el servidor para el modelo de búsqueda cuando se guarde? No creo que necesite obtener ese modelo por ID, borrarlo o actualizarlo realmente no tiene sentido, ya sea porque no lo estoy persistiendo.
esto es en realidad la respuesta correcta. –