设计一个路径解析可能有歧义的 REST API 是否被认为是不好的做法?例如:
GET /animals/{id} // Returns the animal with the given ID
GET /animals/dogs // Returns all animals of type dog
好吧,这是人为的,因为您实际上只会执行
GET /dogs
,但希望它说明了我的意思。从路径解析的角度来看,您似乎不知道您是在寻找带有 id="dogs"
的动物还是只是所有的 dogs
具体来说,我感兴趣的是 Jersey 是否会在解决这个问题时遇到任何麻烦。如果你知道
id
是一个整数怎么办? 最佳答案
不,这不会有问题。如果您查看 the JAX-RS spec § 3.7.2 ,您将看到将请求与资源方法匹配的算法。
所以基本上它是说文字字符的数量是排序的主键(注意它是短路;你赢了主要,你赢了)。因此,例如如果一个请求转到 /animals/cat
, @Path("/animals/dogs")
显然不会在集合中,所以我们不需要担心它。但是如果请求是 /animals/dogs
,那么这两种方法都在集合中。然后该集合按文字字符数排序。由于 @Path("/animals/dogs")
比 @Path("/animals/")
具有更多的文字字符,因此前者胜出。捕获组 {id}
不计入文字字符。
捕获组允许使用正则表达式。所以你可以使用 @Path("/animals/{id: \\d+}")
。任何非数字都不会通过并导致 404,除非它当然是 /animals/dogs
。
关于rest - REST 中的子资源和路径变量冲突?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32898926/