Tôi đang thiết kế một API và cũng sử dụng nó với Backbone.js. Một phần của API sẽ bao gồm các hoạt động tìm kiếm. Ví dụ: khi tìm kiếm ô tô, tôi có thể có một cái gì đó như:Cách thiết kế tìm kiếm REST với xương sống
http://api.mysite.com/search/cars?q=volvo
Với xương sống, tôi có thể thấy hai tùy chọn để tiêu thụ kết quả.
Lựa chọn 1: Một tìm kiếm là một Bộ sưu tập
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();
Phương án 2: Một tìm kiếm là một mô hình, và kết quả là một Bộ sưu tập
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();
những ưu điểm/nhược điểm của các tùy chọn này là gì ? Có một cách backbone-y thiết kế này?
Tôi đang hướng tới tùy chọn 2 vì có vẻ như dễ dàng thêm nội dung vào phản hồi như chi tiết phân trang hoặc url tiếp theo. Nhưng tùy chọn 2 có vẻ lộn xộn hơn theo một vài cách. Ví dụ, tôi sẽ tạo một ID trên máy chủ cho mô hình tìm kiếm khi nó được lưu? Đừng nghĩ rằng tôi cần để có được mô hình đó bằng ID, xóa hoặc cập nhật nó không thực sự có ý nghĩa, hoặc gây ra tôi không kiên trì nó.
này thực sự là câu trả lời đúng. –