【问题标题】:How to implement hierarchy of resources in java for resteasy如何在java中为resteasy实现资源层次结构
【发布时间】:2015-09-03 17:28:57
【问题描述】:

我正在编写一个基于 resteasy 的基于 java 的 REST API。我有以下结构

类别有很多组;组有很多偏好

我有 3 个资源 1. 类别 2. 组 3. 偏好

我想支持这些 API 端点

  • /categories/{cat_id}/groups/(返回该类别的所有组)
  • /groups/{group_id}/preferences/(返回组的所有首选项)
  • /preferences/{preference_id}(返回由传递的 id 标识的首选项)
  • /preferences(返回所有首选项)

上面提到的每种资源都有 3 个资源类

我很困惑如何构建这些方法以及它们应该去哪里。以下是我的具体问题

  1. /groups/{group_id}/preferences/ 实现应该在GroupsResourceImpl 类或PreferenceResourceImpl 类下

  2. PreferenceResourceImpl 类具有用于返回所有全局首选项的/preferences 端点的实现。因此,如果/groups/{groupid}/preferences 端点位于GroupResource 下并调用PreferenceResource 上的方法(将组ID 作为额外参数的方法)??

【问题讨论】:

    标签: java rest resteasy


    【解决方案1】:

    基本上,实现没有区别,你可以做到这一点。您应该按照对您来说最合乎逻辑的方式对它们进行分组。

    就我个人而言,我喜欢以将类似代码组合在一起的方式对资源实现进行分组。这可以通过将需要类似方法从基础架构中提取的路径组合在一起来实现。例如,如果您的所有数据都在关系数据库中,那么您所有的/*/preferences 查询基本上都是SELECT * FROM preferences WHERE ...different stuff...。因此,最合乎逻辑的做法是按您要查询的表对它们进行分组。例如:

    组资源:/categories/{cat_id}/groups/

    因为它总是从表“组”中查询:SELECT * FROM groups WHERE parent_cat_id = {cat_id}

    PreferenceResource:/groups/{group_id}/preferences//preferences/{preference_id}/preferences

    因为它总是会从表“首选项”中查询:SELECT * FROM preferences WHERE parent_group = {group_id}... WHERE id = {preference_id}SELECT * FROM preferences

    但是,如果您的类别/组/首选项驻留在某种图形数据库中 - 那么要查询 /groups/{group_id}/preferences 您需要先找到一个组,然后从内部获取所有首选项,因此,它将是像这样对资源进行分组更合乎逻辑:

    类别资源:/categories/{cat_id}/groups/

    因为它会从“类别”图开始查询:categories.get(cat_id).getGroups()

    组资源:/groups/{group_id}/preferences/

    因为它会从“组”图开始查询:groups.get(group_id).getPreferences()

    PreferenceResource: , /preferences/{preference_id}, /preferences.

    因为它会从“首选项”图表开始查询:preferences.get(preference_id)preferences.getAll()

    【讨论】:

      猜你喜欢
      • 2013-02-21
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多