Backbone.js的与REST API资源的关系及interraction(Backbone.j

2019-09-23 02:40发布

我有一个正在由提供Backbone.js的单个页面的Web应用程序所消耗的小REST API

有迹象表明,该API提供,因此,两种资源类型,主干应用程序使用。 这些文章和评论。 这两个资源具有不同的端点,并有来自各条款之间,以用于该项目的所有意见的位置的链接。

我现在面临的问题是,在我的web应用程序的文章列表中,我想能够显示每个文章的评论的数量。 鉴于这只会是可能的,如果我还获得了评论列表,在当前的设置,需要我做一个API请求,以获得初始的文章列表,另一个用于每个物品要能算数的意见。 这成为一个问题,如果,例如,有100篇文章,因此101个的HTTP请求将需要填充一个单一视图。

我能想到的,现在的解决方案是:

1.在初始制品为包括评论数据请求等,从而

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

在这种情况下,现在的问题是:怎么可能解析“意见”作为一个独立的意见收集,它不包括成文章的模式?

2.包括一些元数据内部的物品,像这样的回应:

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

选项提出了一个问题:我应该如何处理模型的解析,这样,一方面元信息是可用的,而在另一方面,“意见”属性不是一个骨干将尝试在执行更新?

我觉得有可能是另一种解决方案,符合REST的理念 ,这是我的思念,所以如果你有任何其他建议,请让我知道。

Answer 1:

我认为最好的办法是去与你的第二个选项,包括为你的文章模型中每篇文章的评论的数量。

选项提出了一个问题:我应该如何处理模型的解析,这样,一方面元信息是可用的,而在另一方面,“意见”属性不是一个骨干将尝试在执行更新?

不知道你的问题是在这里。 为什么你会担心的评论属性得到更新?

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



Answer 2:

我会建议使用替代2和具有服务器返回与文章收集资源(比如在到达打交道时被认为有用的应用文章属性的子集 /articles )。

与所有的评论文章全文成员资源(无论它们是存储在后台单独的表)将可在/articles/:id )。

从一个Backbone.js的点,你可能希望把收集资源的,比方说, ArticleCollection将每个成员转换(当前与属性的子集),以Article车型。

当用户选择查看完整的文章,你从它拉出ArticleCollection并调用fetch来填充它完全。

关于如何处理包括在收集额外的资源/虚拟属性(做/articles )之类的评论数和其他可能的usefult聚集,我看到几个备选方案:

  1. Article#initialize ,你可以从那些拉出来attributes ,并将其存储作为文章的元数据。 通过这种方式,内置Backbone.Model#toJSON不会看到他们。
  2. 让他们在attributes每个模型的部分,并覆盖Backbone.Model#toJSON到exlcude他们当“序列化”的Article

在atlernative 1, Article#commentCount()助手可以返回this._commentCount || this.get('comments').length this._commentCount || this.get('comments').length ,使其在两个部分和满载的文章的工作。

对于满载的Article ,你可能会想嵌套的转换comments阵列成一个成熟的CommentCollection不管怎样,存储在this._comments ,所以我不认为这是不寻常直接有你的模型存储的其他东西上模式例如,它的外部attributes哈希值。



文章来源: Backbone.js & REST API resources relationship & interraction