0

让我们考虑一下我们有一个用于动物园的 api,../api/zoos它可以一直访问给定动物园中的个体动物,例如../api/zoos/123/elephants/234,每种动物类型都有明确定义的 api。
    现在,如果我们想查询超类型(抽象类 Animal where ),为此类元查询class Elephant extends Animal公开此类 api 是个好主意吗?../api/zoos/123/animals?type="mammal"&legs=4
    让我对这种方法三思而后行的是,虽然超类型 api 对于跨具体类型的元查询实际上很有用,但这本质上是一个只读查询,同样从可扩展性的角度来看,在超类型 Animal 和具体类型之间Elephant 可以有许多其他类型,如 Mammal、FourLegged 等,可以单独查询,然后需要调用是否需要在这些上公开只读 api,或者我们在动物查询中有类型参数就可以了。请建议。

4

1 回答 1

0

您对每种动物都有单独的 ID 吗?
我的意思是,是否有大象 ID=4 和老虎 ID=4?

如果没有,我会将其结构为/zoos/123/animals/234

然后,您可以/zoos/123/animals?species=elephant列出所有大象,并返回一组 ID 可能看起来有些随机的链接:{ /zoos/123/animals/5, /zoos/123/animals/19, /zoos/123/animals/34, /zoos/123/animals/35, /zoos/123/animals/72 }

如果您确实有跨物种的 ID 冲突,那么我建议创建一个动物 ID 到物种 ID 的新资源映射:

+----------------------------+
|animal_id|species|species_id|
+----------------------------+
|       1 |  duck |        1 |  => the first duck is /animals/1
|       2 |  frog |        1 |  => the first frog is /animals/2
+----------------------------+

然后你仍然可以使用 URL 结构/zoos/123/animals/234。您无需将青蛙称为/frogs/1页面,例如/animals?order=anura&page=1&limit=10直接为您提供指向 /animals/2 的链接

总之,ID 属于您的超类

于 2012-11-30T16:49:35.137 回答