用于树分类资源的RESTful URL

时间:2012-05-28 08:50:29

标签: url rest tree hierarchical-data

我有一个经典数据模型,其中项目按层次树结构分类:

example.com/myanimals/pet/dog/{mydog_ID}
example.com/myanimals/pet/cat/{mycat_ID}
example.com/myanimals/birds/{mybirds_ID}

我希望公开一个可通过上述URL寻址的RESTful API。

  • 当URL的最后一个元素是一个项目时,我必须显示该项目以及可能的项目类别的子类别
  • 如果最后一个元素是一个类别,我必须显示其项目及其子类别的列表。

如果我正在处理某个类别或项目,那么会有两种不同的行为。 我在java上使用RESTLet库,现在我的问题是:

  1. 通过(理论上的)无限类别路径来处理资源是一种RESTful方法吗?
  2. 对于像这样的数据模型,以RESTful方式为URL建模URL的最佳方法是什么?
  3. 另一个问题可能是,我必须解析 animals 之后的所有字符,然后测试最后一个元素是一个类别本身还是一个项目,最后用适当的方法处理资源representetion。这也意味着我有一个类别和项目的命名空间,我必须确保类别和项目具有唯一的名称。

    更新

    好吧最后我最终得到了这个设计:

    /animals -> read all animals
    GET /animals/categories/cat1/cat2 -> read all animals (as a list) and/or subcategories of cat2 (parameterized with query param)
    /animals/name -> handle specific animal
    /animals/categories -> read root categories
    PUT/DELETE/POST /animals/categories/cat1/cat2 -> handle all subcategories of cat2
    /animals/tags/tag -> read list of all animals labeled with this tag
    
    • 在第一个设计中,命名空间类别和动物发生冲突: 路由创建元素存在一个严重问题:POST / informationmodels应该被路由到动物创建还是创建类别?
    • 使用类似URL设计的文件系统/animals/cat1/cat2/.../animalname,如果客户端获取动物项目或类别,然后是项目列表,则客户端现在不会。

    上述解决方案似乎正确处理了这些问题,您只需要知道名称​​ categories tags 的动物都不可寻址,因为这些是保留关键字。< / p>

0 个答案:

没有答案