Eri*_*ric 4 rest jax-rs jersey
设计一个可能在路径分辨率上有歧义的REST API被认为是不好的做法吗?例如:
GET /animals/{id} // Returns the animal with the given ID
GET /animals/dogs // Returns all animals of type dog
Run Code Online (Sandbox Code Playgroud)
好吧,这是设计的,因为你实际上只是这样做GET /dogs
,但希望它说明了我的意思.从路径分辨率的角度来看,似乎你不知道你是在寻找动物id="dogs"
还是只是所有动物dogs
具体来说,我对泽西岛是否会解决这个问题感兴趣.如果你知道它id
是一个整数怎么办?
"具体来说,我对泽西岛是否会解决这个问题感兴趣"
不,这不是问题.如果查看JAX-RS规范§3.7.2,您将看到将请求与资源方法匹配的算法.
[ E是匹配方法的集合] ......
排序ê使用中的每个成员作为主键(降序),(捕获组作为次要键(降序),并捕获基团与非默认的正则表达式的数量的数量,即不是"的文字字符的数目( [^ /] +?)')作为三级键(降序)
所以基本上它说,数字或文字字符是其中的排序由主键(注意,这是短路;你赢一次,你赢了).因此,举例来说,如果一个请求到达/animals/cat
,@Path("/animals/dogs")
显然不会是在集,所以我们并不需要担心它.但是如果请求是/animals/dogs
,则两个方法都在集合中.然后按照文字字符数对该集合进行排序.由于@Path("/animals/dogs")
有更多的字面字符@Path("/animals/")
,前者胜出.捕获组{id}
不计入文字字符.
"如果你知道id是一个整数怎么办?"
捕获组允许正则表达式.所以你可以使用@Path("/animals/{id: \\d+}")
.任何不是数字的东西都不会通过并导致404,除非它当然是/animals/dogs
.
归档时间: |
|
查看次数: |
548 次 |
最近记录: |