【问题标题】:Container class for REST get list methodREST 获取列表方法的容器类
【发布时间】:2013-10-09 23:04:22
【问题描述】:

我遇到了一种情况,我认为这是不遵循 REST 约定的问题。请考虑这一点,我有一个 API 允许通过此 REST API 处理书籍记录

    http://localhost:8080/api/books

在我看来,当我执行 GET 来检索列表时,这是我所期望的:

    [{"name":"some book name",
      "price":"5"
     },
     {"name":"second book",
      "price":"100"
     }
    ]

上面的 JSON 将允许我使用 Gson 轻松反序列化为对象列表/数组。

但是,出于某种原因,此 API 被实现为返回:

    {"books": [{"name":"some book name",
                "price":"5"
               },
               {"name":"second book",
                "price":"100"
               }
              ]
    }

如您所见,我现在需要使用一个名为“Books”的容器类进行反序列化,然后从 Books 的方法之一获取 book 数组。

我认为使用不提供更多价值的容器类(它只是一个列表容器)是一个坏主意,但我在管理大型系统的 REST API 所涉及的所有方面不是专家/非常有经验。因此,如果你们中的任何人能告诉我这是完全没问题还是这是一个麻烦的迹象(如果可能的话,请提供解释),不胜感激。

【问题讨论】:

    标签: java json rest convention


    【解决方案1】:

    根据我的经验,这很正常。它是否是最佳实践是一个见仁见智的问题。您希望资源返回一系列书籍项目还是单个书籍项目?无论哪种方式,使用 GSON/Jackson/Whatever 都可以轻松反序列化。有时是因为列表容器中包含其他元数据,例如返回部分结果时的总计数。

    【讨论】:

    • 我想我的问题是我没有使用 Books 类,除了使用它来获取书籍列表。因此,当我们可以简单地执行 List books = gson.fromJson(...); 时,我不明白为什么我们需要它
    • 至于对资源的期望,需要一个列表(这是约定,不是吗?)。如果它是一本书,我们不使用 .../books/{id} 吗?也许我不了解您的 cmets。
    • 我想你是理解的。我只是问你希望看到什么。我在野外见过两种方式。你的论点是正确的,但我认为其他人可能不同意。
    • 酷,我喜欢“你的论点是正确的”部分,谢谢鼓励。希望看看其他大师可以在这里分享什么。你的偏好是什么?
    • 我喜欢你的方式,但我经常看到另一种方式。有时是因为列表容器中还有其他元数据,例如返回部分结果时的总数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2011-09-22
    • 2021-04-13
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多