Angularjs RESTAPI是否应该将来自多个表的信息合并到JSON响应中?

Angularjs RESTAPI是否应该将来自多个表的信息合并到JSON响应中?,angularjs,json,rest,nosql,Angularjs,Json,Rest,Nosql,我想讨论一下RESTAPI标准模式。我有一个NoSQL风格的实现。。。也就是说,有一个表包含对象议程项目,每个议程项目都有对另一个表文档中记录的引用列表。在我正在构建的UI中,用户可以选择现有附件,并将其附加到议程项目。在此UI中,您不能创建新的文档对象,只能引用现有的文档对象。因为这是一个NoSQL实现,所以我没有连接doc_id上的表,而是将它们作为单独的表进行操作 有两种方法可以实现RESTAPI。第一个是非规范化的,其中一个请求获取议程项目记录,第二个请求获取文档。使用议程项目中的文档i

我想讨论一下RESTAPI标准模式。我有一个NoSQL风格的实现。。。也就是说,有一个表包含对象议程项目,每个议程项目都有对另一个表文档中记录的引用列表。在我正在构建的UI中,用户可以选择现有附件,并将其附加到议程项目。在此UI中,您不能创建新的文档对象,只能引用现有的文档对象。因为这是一个NoSQL实现,所以我没有连接doc_id上的表,而是将它们作为单独的表进行操作

有两种方法可以实现RESTAPI。第一个是非规范化的,其中一个请求获取议程项目记录,第二个请求获取文档。使用议程项目中的文档id,在客户端中可以找到相关的文档信息

[
   {
    "name": "Agenda Item 1",
    "attachments": ["11556", "87544"]
    },
   {
    "name": "Agenda Item 2",
    "attachments": ["33445", "87544"]
    }
]
文件清单如下:

[
   {
    "name": "Design Spec A.ppt",
    "id": "11556"
   },
   {
    "name": "Design Guidelines.doc",
    "id": "33455"
   },
   {
    "name": "User Studies.xls",
    "id": "87544"
   },
]
第二种方法是构造REST,以便议程项目的JSON表示在一个请求中包含所有文档细节。我将称之为无用,因为有额外的信息不是来自表格

[
   {
    "name": "Agenda Item 1",
    "attachments": [{
        "name": "Design Spec A.ppt",
        "id": "11556"
      }, 
      {
        "name": "User Studies.xls",
        "id": "87544"
      }]
    },
   {
    "name": "Agenda Item 2",
    "attachments": [{
        "name": "Design Guidelines.doc",
        "id": "33455"
      }, 
      {
        "name": "User Studies.xls",
        "id": "87544"
      }]
    }
]
后一种格式是

对客户端来说很方便,因为在一个请求中,您就可以获得向用户呈现漂亮显示所需的所有信息。 效率低下,因为有关一个文档的信息发送了两次。一般来说,它可能比这个例子包含更多的信息。 无用,因为如果在更新命令中发布相同的格式,则应忽略有关文档的额外详细信息-只有id与更新相关。如果要更改此结构中文档的名称,则可能不会使用新名称更新该文档。由于文档在此结构中出现两次,因此它可能在不同的位置具有不同的名称。 似乎规则可能是在获取信息时添加额外的文档信息,而在放置或发布JSON结构时忽略这些额外信息

第三种选择是混合:你得到脂肪填充的表单,但是你把瘦的非规范化表单放回去。我不希望同一个对象有两种不同的格式。我使用的是AngularJS,获取的JSON对象直接在JS对象树中进行转换,将完全相同的内容放回原处非常方便

我已经实现了这两种方法,这两种方法都有效,但我想指出一个讨论:每种方法的智慧是什么


此外,在使用AngularJS时,将其他成员放入UI的集合中非常方便,例如选择的标志。再说一次,也许我太懒了,但是在发回更新之前从每个记录中去掉这个选中的标志是一件麻烦事,如果我可以假设额外的“无用”数据成员将被忽略,那么编码就容易多了。假设您的REST API将忽略额外的元素可以吗?

发布更新之前,确实不需要删除文档中的任何元素/字段-您只需在json中包含需要更新的内容并启动它即可。未包含的内容将保留在数据库中

所以-实际上,没有无用的数据成员。第二种方法更好——第一种方法更多的是关系数据库的遗留问题

但是,在更新频繁的情况下,第一种方法可以更好地提高性能