【问题标题】:ASP.NET WebAPI URL VersioningASP.NET WebAPI URL 版本控制
【发布时间】:2016-06-15 04:03:18
【问题描述】:

我们想要创建通用的公共网络服务,并创建定制的 API。 但是如何将这些端点隔离、版本化和绑定为超大规模系统?

我们想要:

  • https://api.domain.tld/v1/..
  • https://api.domain.tld/v2/..
  • https://api.domain.tld/latest/..
  • https://api.domain.tld/bosch/v1/..

  • https://domain.tld/api/v1/..
  • https://domain.tld/api/v2/..

所有端点都应该被隔离。在 https://domain.tld/api/v2/.. 这样的端点后面至少存在 3 个 ASP.NET WebAPI 实例。我们不想通过 WebAPI 项目中的命名空间来分离版本控制,并使用内部路由配置来解决这个问题。

我们希望在本地和 Azure 上都有这种行为。 是否有任何建议或最佳实践和配置示例?

我在这里只能找到一个帖子(How to version and configure WebApi with multiple aliases),很老,没有答案。

【问题讨论】:

    标签: azure iis asp.net-web-api azure-web-app-service


    【解决方案1】:

    我总是使用版本作为 api 路由,和你一样:

    https://domain.tld/api/v1/..
    https://domain.tld/api/v2/..
    

    这一直很好用,但其他使用 url 参数,我觉得不太明确:

    Visual Studio Team Services - API

    我只是不建议你采用这种模式:

    https://api.domain.tld/latest/..
    https://api.domain.tld/bosch/v1/..
    

    这会让你的 API 看起来有点凌乱,但如果你在 API 中使用逻辑服务可能会有意义:

    https://api.domain.tld/service1/v1
    https://api.domain.tld/service1/v2
    https://api.domain.tld/service2/v1
    

    【讨论】:

    • 感谢您的回复。但是如何将子文件夹映射到单独的实例的问题仍然悬而未决。例如,https://api.domain.tld/service1/v1 是 Server1 上的 Instance3,https://api.domain.tld/service1/v2 应该是 Server17 上的 Instance9。负载均衡器是否对此负责?
    • 自定义 API 的逻辑分隔将是 https://api.domain.tld/bosch/userservice/v1 https://api.domain.tld/bosch/orderservice/v3 但这给我留下了同样的问题:如何将子目录映射到服务。
    • 为什么需要负载平衡?这只是我们正在谈论的 Web api 映射。
    • 这些是大量使用的端点。我们需要对它们进行负载平衡。这里没有人谈论 api 映射本身。我的问题仍然是:如何将虚拟目录映射到绑定?!在https://api.domain.tld/bosch/orderservice/v1 后面可以存在7 个实例。但是如何映射它们?!在 IIS 中,我只能绑定域 api.domain.tld,但不能绑定额外的 /bosch/orderservice/v1。但是我们不想在 API 代码中保留 API 版本控制并用路由覆盖它。那是无用的,不可扩展的!
    • 好吧,您当然可以创建多个虚拟目录,但这有点麻烦,让虚拟目录充当 URL 的版本部分。至于负载平衡,我很抱歉,但似乎我们在谈论不同的事情,负载平衡通过将请求分派到单个端口来工作,您不必担心向同一个端口收到太多请求,你肯定不需要不同的虚拟网站。
    猜你喜欢
    • 2018-03-10
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多