【问题标题】:Correct/best way to return a collection from an rest api从rest api返回集合的正确/最佳方式
【发布时间】:2015-10-29 21:30:47
【问题描述】:

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

我正在开发一个使用 Play Framework 制作的 restfull api。问题是我找到了两种可能的方法来呈现来自 Play 的 JSON 响应。 renderJSON 和 renderJSON2。

假设我向 /students 发出 GET 请求

在我的项目中,该请求应返回一组学生,可能是一个学生,也可能是许多学生。事情在后端我最终会做这样的事情

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 在这里所做的是将学生列表放入一个对象中,该对象具有“分页”和“结果”属性,其中结果实际上是我想要的。

另一方面,我测试了另一种称为 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 调用。如果它需要一个对象并且它接收到一个集合,你甚至会在浏览器控制台中收到来自restangular的错误,反之亦然。

因此,如果我只使用 renderJSON(),那么我将无法充分利用 restangular,因为它为我提供了一种直接获取对象集合并将其绑定到我的 angularJs 模型的方法。这让我认为,对于总是返回集合的 api 方法,我应该使用 renderJSON2。 唯一让我想使用 renderJSON 的是“分页”属性在限制响应结果时很有用。

解决这个问题的最佳方法是什么?我应该在所有情况下都使用renderJSON,甚至可能停止使用restangular,还是应该根据api方法返回的内容同时使用两种渲染方法? 这有什么标准吗?

在此先感谢,很抱歉发了这么长的帖子。

【问题讨论】:

  • results 应该是一个数组,而不是一个大对象

标签: json angularjs rest playframework restangular


【解决方案1】:

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

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

【讨论】:

  • 哦,我没有在restangular的文档中看到那个部分。我来看看。提前致谢!
猜你喜欢
  • 1970-01-01
  • 2015-01-30
  • 2011-07-10
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
  • 2020-09-03
相关资源
最近更新 更多