如何解决与API版本相关的障碍

时间:2016-02-02 18:44:01

标签: java api restful-architecture api-versioning

我正在提供全面的服务,并且有超过20个客户正在使用此服务。

@Path("/provider")
public class Provider{

@Path("/simpleprovider")
@GET
public String getProvider(){
return "Simple Provider";
}
}

现在我决定在服务中引入版本,我有很多google,阅读我的文章,但我完全糊涂我该怎么办?假设我更改@Path("/provider/v1")等新服务的URI,而不是如何为现有客户提供支持?通过考虑这个问题,我应该在api新版本出现时为每个客户提供更改吗?

谷歌搜索后,我发现有3种方法可以提供版本控制

  1. 网址版本控制

  2. 自定义请求标题

  3. 内容类型

  4. 但是找不到任何实际的例子请在这方面帮助我

    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/

    非常感谢任何帮助

1 个答案:

答案 0 :(得分:2)

对服务进行版本控制可能非常棘手,在确定版本控制策略时始终是一个重大决定。特别是如果你有人使用这项服务。根据我的经验,这里有一些事情需要考虑:

  1. 了解并沟通您何时以及是否计划API的防晒版本。你想要的最后一件事就是你需要维护10个不同版本的API。

  2. 了解是否绝对需要更改版本。一个好的经验法则是,如果核心功能正在发生变化,或者合同可能会破坏某些与您的API集成的软件。在确定您是否确实需要版本时,需要考虑以下事项:

    • 如果要从资源中删除字段。
    • 如果要删除(或更新)URL(或方法)。
    • 如果现有的端点(或方法)逻辑发生变化,需要消费者重新实施。
    • 总的来说,如果您所做的更改会破坏与您的API集成的人。
  3. 您是否要求数据库更改不会向后兼容您以前的版本?这就是版本控制真的很有趣(讽刺),因为现在你可能不得不使你的数据库向后兼容,根据我的经验,这可能是解决前进的难题。

  4. 尽管如此,为了回答您的问题,我找到了版本在URL中的最佳方式。对您的版本进行非常简单和深思熟虑,以便您的集成商能够清楚地了解它。例如:

    • GET / v1 / products / {id} //版本1
    • GET / v2 / products / {id} //版本2

    **如果您决定使用网址版本,那么我的建议就是为版本添加“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,人们使用错误的决定将赶紧赶上你。