Correct/best 从休息 api 到 return 集合的方式

Correct/best way to return a collection from an rest api

好的,这就是我的困境。 (抱歉,解释太长了,我只是想尽可能清楚地说明这个案例)

我正在研究使用 Play Framework 制作的 api。问题是我发现了两种可能的方法来呈现来自 Play 的 JSON 响应。渲染JSON 和渲染JSON2.

假设我向 /students 发出 GET 请求

在我的项目中,请求应该 return 一组学生,它可以是一个学生,也可以是许多学生。事情在后端我最终做了这样的事情

renderJSON(studentList)

而 studentList 是 java.utils.List。所以我在前端得到的json是这样的

{
    paging: {
        total: 2
    }-
    results: [2]
        0:  {
            id: "33333333"
            email: "student1@test.com"
            name: "Bob"
        }-
        1:  {
            id: "444444444"
            email: "student2@test.com"
            name: "Jhon"
        }-
-
}

如您所见,rednerJSON 在这里所做的是将学生列表放入具有 "paging" 和 "results" 属性的对象中,其中结果实际上是我想要。

另一方面,我测试了另一个名为 renderJSON2 的方法,在同样的情况下,给出了这个结果。

[1]
    0:  {
        id: "33333333"
        email: "student1@test.com"
        name: "Bob"
    }
[2]
    0:  {
        id: "444444444"
        email: "student2@test.com"
        name: "Jhon"
    }

如您所见,使用此方法我得到普通学生列表作为响应,而不是嵌入到另一个对象中。

当我开始将 Restangular module 与 AngularJs 结合使用时,我的问题来了,因为 restangular 有特定的方法来使 api 调用 return 一个单独的对象或一个对象的集合。如果 restangular 期待单个对象并且它接收到一个集合或反之亦然,您甚至会在浏览器控制台中收到 restangular 错误。

所以如果我只使用 renderJSON() 那么我就不会从 restangular 中得到最好的,因为它为我提供了一种直接的方法来获取对象集合并将其绑定到我的 angularJs 模型。这让我认为,对于总是 return 集合的 api 方法,我应该使用 renderJSON2。 唯一让我想使用 renderJSON 的是 "paging" 属性在限制响应结果时很有用。

处理这个问题的最佳方法是什么?我应该在所有情况下都使用 renderJSON 甚至停止使用 restangular 还是应该根据 api 方法 return 的内容使用两种渲染方法? 这有什么标准吗?

提前致谢,抱歉拖了这么久post。

您可能需要使用 renderJSON 并向 Restangular 提供程序添加响应拦截器以解包接收到的对象并存储分页数据:

https://github.com/mgonto/restangular/#my-response-is-actually-wrapped-with-some-metadata-how-do-i-get-the-data-in-that-case