rest - 如何使用主干设计 REST 搜索

标签 rest backbone.js

我正在设计一个 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();

这些选项的优点/缺点是什么?有没有 Backbone 的设计方式?

我倾向于选项 2,因为在响应中添加诸如分页详细信息或下一个 url 之类的内容似乎更容易。但选项 2 在几个方面似乎更困惑。例如,当我保存搜索模型时,我会在服务器上为它生成一个 ID 吗?不要认为我需要通过 ID 获取该模型,删除或更新它也没有任何意义,因为我没有坚持它。

最佳答案

我不知道这是否是一个好习惯,
但我使用“获取”方法中的“数据”选项进行搜索。

https://stackoverflow.com/a/6659501/1067061

也许它有帮助。
祝你好运!

编辑

这是在集合 url 中传递查询参数的正确方法,
The reference to the Docs展示了如何在 fetch 选项中传递 data 属性,data 属性实际上是一个对象,键值对引用查询参数及其值

关于rest - 如何使用主干设计 REST 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106478/

相关文章:

jquery - 使用 Backbone.js View remove() 方法和 jQuery 的 fadeOut()

javascript - Backgrid 表标题上的工具提示

javascript - “单页” JS网站和SEO

javascript - 主干集合 - 过滤和渲染集合失去对原始未过滤集合的引用

node.js - Jasper Rest API,运行报告

node.js - 在Cosmos DB中使用回送

php - Laravel NotFoundHttpException 虽然路由存在

javascript - 带有谷歌地图的 Backbone.js - 这个问题和听众

java - SSL 和验证用户

json - 链接到 REST API : by its ID, 中的另一个资源或其 URL?