设计一个路径解析可能有歧义的 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/

10-16 18:06