我正在提供全面的服务,并且有超过20个客户正在使用此服务。
@Path("/provider")
public class Provider{
@Path("/simpleprovider")
@GET
public String getProvider(){
return "Simple Provider";
}
}
现在我决定在服务中引入版本,我有很多google,阅读我的文章,但我完全糊涂我该怎么办?假设我更改@Path("/provider/v1")
等新服务的URI,而不是如何为现有客户提供支持?通过考虑这个问题,我应该在api新版本出现时为每个客户提供更改吗?
谷歌搜索后,我发现有3种方法可以提供版本控制
网址版本控制
自定义请求标题
内容类型
但是找不到任何实际的例子请在这方面帮助我
http://stackoverflow.com/questions/389169/best-practices-for-api-versioning http://www.narwhl.com/2015/03/the-ultimate-solution-to-versioning-rest-apis-content-negotiation/ http://restcookbook.com/Basics/versioning/
http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html
http://www.lexicalscope.com/blog/2012/03/12/how-are-rest-apis-versioned/
非常感谢任何帮助
答案 0 :(得分:2)
对服务进行版本控制可能非常棘手,在确定版本控制策略时始终是一个重大决定。特别是如果你有人使用这项服务。根据我的经验,这里有一些事情需要考虑:
了解并沟通您何时以及是否计划API的防晒版本。你想要的最后一件事就是你需要维护10个不同版本的API。
了解是否绝对需要更改版本。一个好的经验法则是,如果核心功能正在发生变化,或者合同可能会破坏某些与您的API集成的软件。在确定您是否确实需要版本时,需要考虑以下事项:
您是否要求数据库更改不会向后兼容您以前的版本?这就是版本控制真的很有趣(讽刺),因为现在你可能不得不使你的数据库向后兼容,根据我的经验,这可能是解决前进的难题。
尽管如此,为了回答您的问题,我找到了版本在URL中的最佳方式。对您的版本进行非常简单和深思熟虑,以便您的集成商能够清楚地了解它。例如:
**如果您决定使用网址版本,那么我的建议就是为版本添加“v”,使用1或2等单个数字。不要进入版本,子版本等...这将使您的API看起来好像很多,可能引起消费者的关注。另外,请尽可能将版本保留为URL的FAR。我们的想法是版本右侧的所有内容都是新版本的资源。 我会避免使用标题来版本化您的服务。您不希望隐藏消费者的版本。尽可能透明和明确地进行版本控制。
URL中的版本控制还允许您在Web服务器和代理上执行一些有用的路由和操作。您可以在实际代码中使用这样的版本,例如:
[HttpGet("v1/products")]
public Product GetProduct(string id)
{
return _repository.GetProduct(id);
}
或者您可以通过设置虚拟目录(或其他)来使用您的Web服务器进行版本控制。然后你的代码看起来像这样:
[HttpGet("products")]
public Product GetProduct(string id)
{
return _repository.GetProduct(id);
}
然而,你决定版本是非常重要的,要考虑每个决定的专业人士和骗局,并权衡他们,因为如果你运行的API,人们使用错误的决定将赶紧赶上你。