让我们考虑一下我们有一个用于动物园的 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,或者我们在动物查询中有类型参数就可以了。请建议。
问问题
139 次
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 回答