让我们考虑一下动物园的api,../api/zoos
一直到访问某个动物园中的个体动物,例如../api/zoos/123/elephants/234
,即每种动物类型都有明确定义的api。
现在,如果我们想要在超类型(抽象类Animal class Elephant extends Animal
)中进行查询,那么为这样的元查询公开排序../api/zoos/123/animals?type="mammal"&legs=4
的api是一个好主意吗?
让我对这种方法三思而后行的是,虽然超类型api对于跨具体类型的元查询几乎是有用的,但这实际上是一个只读查询,从可扩展性的角度来看,在超类型动物和具体类型之间说大象可以有很多其他类型,如Mammal,FourLegged等可以单独查询,然后需要调用是否只需要在这些上显示只读api,或者我们在动物查询中有一个类型参数做的工作。请建议。
答案 0 :(得分:0)
每种动物都有独立的身份证吗? 我的意思是,是否有大象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
+----------------------------+
然后您仍然可以使用网址结构/zoos/123/animals/234
。您无需将青蛙称为/frogs/1
,因为/animals?order=anura&page=1&limit=10
这样的页面会直接为您提供/ animals / 2
总之, ID属于您的超类