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

时间:2012-07-30 05:32:54

标签: java spring api rest web

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

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

1 个答案:

答案 0 :(得分:3)

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

http://www.stormpath.com/blog/spring-mvc-rest-exception-handling-best-practices-part-2有一篇关于如何配置spring mvc来为restful应用程序执行泛型错误处理的文章。

对于接受头文件的过滤非常容易,因为spring允许您根据过滤器缩小处理程序方法映射,如下面的请求映射中的headers =中所示。

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