Web services 微服务体系结构中处理Web服务的API网关

Web services 微服务体系结构中处理Web服务的API网关,web-services,rest,architecture,microservices,Web Services,Rest,Architecture,Microservices,我有一个建筑问题。我们正在将一个旧的整体结构转变为一个微服务架构。因此,我们计划识别有界上下文,并利用这些上下文创建微服务 为了跟上我们的公共API,我们将有一个API网关来正确地路由这些东西。内部通信将通过REST完成(在第一次拍摄时)。不幸的是,我们现有的公共API大部分时间都是关于Web服务的 若我们从Web服务转换到REST通信,我们已经需要了解域对象的内容。这不是已经违反了微服务设计吗。最后,这意味着在微服务中添加一个字段意味着也要接触API网关。我不喜欢 我错了吗?你对此有何看法 如

我有一个建筑问题。我们正在将一个旧的整体结构转变为一个微服务架构。因此,我们计划识别有界上下文,并利用这些上下文创建微服务

为了跟上我们的公共API,我们将有一个API网关来正确地路由这些东西。内部通信将通过REST完成(在第一次拍摄时)。不幸的是,我们现有的公共API大部分时间都是关于Web服务的

若我们从Web服务转换到REST通信,我们已经需要了解域对象的内容。这不是已经违反了微服务设计吗。最后,这意味着在微服务中添加一个字段意味着也要接触API网关。我不喜欢

我错了吗?你对此有何看法


如果您不打算将域实体用作内部REST服务的输入参数,则此处不会出现任何冲突。使用普通的旧DTO对象作为输入参数,然后将它们映射到域对象

如果我是你,我也不会使用API网关解决方案。我知道您正试图使您的更改对API客户端透明,但API网关添加了一个冗余步骤,这可能会导致性能问题

我建议采取以下措施:

  • 将域逻辑提取到可重用库中,以便新旧API都可以使用它们
  • 使用第#1项中的libs构建API的新版本
  • 确保所有新客户机都在使用新API,并在旧客户机之间进行推广

  • 是的,在一段时间内支持这两个API并不容易,但从长远来看,您将摆脱该API网关。

    如果我的理解是正确的(请参阅我在Maksym的重播中的评论),您的API网关类似于SOA中的ESB。如果是这样,您可以借用ESB中的一些常见模式来帮助解决您的问题。在ESB中,我们经常使用定制适配器在服务之间或服务与开放标准之间转换消息格式。在您的情况下,您需要在API网关中引入一个额外的层,以将公共API的数据模型转换为MS A和B理解的数据模型,反之亦然。通过这样做,公共API和MS A和B仍然是松散耦合的。的确,如果MS A和B中的数据模型或公共API发生更改,您必须对适配器进行更改。但它的影响将是最小的,因为适配器是如此轻,他们的设计是为了迅速更换

    如果我的理解是正确的,那么API网关层是必需的,因为它将web服务协议(可能是基于SOAP的)转换为restful API。是的,所以最好尝试摆脱它,让客户端使用新的restfull API。幸运的是,您可以选择摆脱遗留服务。在不可能的情况下,我提出的解决方案已被广泛接受和使用。这确实是一个干净的解决方案。如果无法让当前客户端开始使用新的API,您是对的,但值得一试。您正确地理解了我的担忧,所以看起来没有干净的解决方案。