关于在Java / Spring项目中组织版本化REST API代码的最佳实践(示例?)?

我很好奇,如果有人能指出我组织REST API代码版本化的好例子/最佳实践(基于uri,意思是“/ v1 / zzz”和“/ v2 / xxx”,甚至更好的东西依赖于Accept标头) – 在Java / Spring项目中? 我担心我现在的项目太复杂了,所以向别人学习会很好。

澄清:不确定我是否应该通过filter,然后使用一些设计模式来改变行为,但这将使我的filter相当复杂..或者可能是我没有考虑弹簧和DI的一些技巧,所以我可以使我的代码更清洁。 最简单的方法是在每种方法中都有一些策略模式,它们会有不同的版本,但它似乎也不太干净:-(

我强烈建议您阅读Apigee上的书籍和博客http://offers.apigee.com/api-design-ebook-bw/我发现它为设计url和进行error handling提供了非常实用的建议。

http://www.stormpath.com/blog/spring-mvc-rest-exception-handling-best-practices-part-2有一篇非常棒的文章介绍了如何配置spring mvc来为restful应用程序进行通用error handling。

至于接受头部的过滤,这很容易做到,因为spring允许你缩小基于filter的处理程序方法映射,如下面的请求映射中的headers =。

@RequestMapping(value="/narrow/headers/{name}/{email}/{customerNumber}", method={RequestMethod.POST,RequestMethod.GET}, headers="Referer=http://localhost:8080/SpringMVC/request-mappings.html") public ResponseEntity narrowOnHeaders( @PathVariable("name")String name, @PathVariable("email") String email, @PathVariable("customerNumber") Integer customerNumber, @RequestHeader("Referer") String referer )