【问题标题】:Backbone.js & REST API resources relationship & interractionBackbone.js 和 REST API 资源的关系和交互
【发布时间】:2012-09-27 11:18:07
【问题描述】:

我有一个由 Backbone.js 提供支持的单页 Web 应用程序正在使用的小型 REST API

API 提供两种资源类型,因此 Backbone 应用使用。这些是文章和cmets。这两个资源具有不同的端点,并且每篇文章都有一个链接到该项目的所有 cmets 的位置。

我面临的问题是,在我的网络应用程序的文章列表中,我希望能够显示每篇文章的 cmets 数量。鉴于只有在我还获得 cmets 列表的情况下才有可能,在当前设置中,将要求我发出一个 API 请求来获得初始文章列表,并为每篇文章发出另一个请求,以便能够计算数量cmets。例如,如果有 100 篇文章,这将成为一个问题,因此需要 101 个 HTTP 请求来填充一个视图。

我现在能想到的解决办法是:

1.在最初的文章中包含 cmets 数据这样的请求

{
  {
    "id": 1,
    "name": "Article 1",
    ...
    "comments": {
      {
        "id": 1,
        "text": "some comment"
      },
      {
        "id": 2,
        "text": "some comment"
      },
      ...
    }
  },
}

本例中的问题是:如何将“cmets”解析为单独的 cmets 集合而不包含在文章模型中?

2。在文章响应中包含一些元数据,如下所示:

{
  {
    "id": 1,
    "name": "Article 1",
    ...
    "comments": 13
  },
}

引发问题的选项:我应该如何处理模型的解析,以便一方面元信息可用,另一方面,“cmets”属性不是 Backbone 会尝试执行更新的一个开吗?

我觉得可能有另一种解决方案,符合 REST 哲学,对此我错过了,所以如果您有任何其他建议,请告诉我。

【问题讨论】:

    标签: rest backbone.js relationship


    【解决方案1】:

    我认为您最好的选择是使用您的第二个选项,在您的文章模型中包含每篇文章的 cmets 数量。

    引发问题的选项:我应该如何处理模型的解析,以便一方面元信息可用,另一方面,“cmets”属性不是 Backbone 会尝试执行更新的一个开吗?

    不确定您关心的是什么。为什么会担心 cmets 属性会被更新?

    我想不出任何其他“RESTy”方式来实现您想要的结果。

    【讨论】:

      【解决方案2】:

      我建议使用备选方案 2 并让服务器返回 文章属性的子集,被认为对 处理文章集合资源时的应用程序 (也许可以通过/articles 联系到)。

      完整的文章成员资源及其所有 cmets(无论是 它们存储在后端的单独表中)将是 可在/articles/:id 获取)。

      从 Backbone.js 的角度来看,您可能希望将 例如,ArticleCollection 中的集合资源,这将 转换每个成员(当前具有属性的子集) 给Article模特。

      当用户选择完整查看文章时,您将其拉出 从ArticleCollection 中取出并调用fetch 来填充 完整的。

      关于如何处理包含的额外/虚拟属性 在集合资源 (/articles) 中,例如评论数和 可能还有其他有用的聚合,我看到了一些替代方案:

      1. Article#initialize 中,您可以从attributes 中取出这些内容 并将它们作为元数据存储在文章中。这样内置 Backbone.Model#toJSON 不会看到他们。
      2. 将它们保留在每个模型的attributes 部分并覆盖 Backbone.Model#toJSON 在“序列化”Article 时排除它们。

      在替代方案 1 中,Article#commentCount() 助手可以返回 this._commentCount || this.get('comments').length 让它工作 在部分和完全加载的文章上。

      对于满载的Article,您可能希望将 无论如何,将comments 数组嵌套成一个成熟的CommentCollection 并将其存储在this._comments 中,所以我不认为这很不寻常 让您的模型直接在模型实例上存储其他内容, 在其attributes 哈希之外。

      【讨论】:

        猜你喜欢
        • 2012-08-24
        • 2021-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多