0

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

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 建模的最佳方法是什么?

另一个问题可能是,使用该设计,我必须解析 Animal 之后的所有字符然后测试最后一个元素是类别本身还是项目,最后以适当的表示处理资源。这也意味着我有一个用于类别和项目的命名空间,并且我必须确保类别和项目具有唯一的名称。

更新

好的,最后我完成了这个设计:

/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 之类的文件系统,如果客户端正在获取动物项目或类别,然后是项目列表,则客户端现在不会这样做。

上面的解决方案似乎正确处理了这些问题,您只需要知道没有名称类别标签的动物将是可寻址的,因为这些是保留关键字。

4

0 回答 0