客户端可以绕过API网关调用前端微服务吗?

时间:2017-09-11 10:05:24

标签: iframe architecture microservices api-gateway

我们的系统是使用微服务构建的,所有微服务都位于API网关之后。由于它们都是REST API服务,因此使用API​​网关的好处和全部意义对我来说很清楚。那么前端微服务 - 小组件,还有UI和相应的后端来处理内部通信呢?是否存在代理每个微服务HTTP调用有害的情况?

示例

我们的微服务之一是支付提供商集成。由于处理付款具有特定的规定,其中之一是必需的网络浏览器重定向到用户的银行页面以进行授权。由于这不可能以纯粹的后端方式进行,我们提供了一个前端微服务 - 一种基本上服务于HTML的服务,您必须在iframe中嵌套,并且应该能够以e2e方式处理付款。下面是非常简化和剥离的例子。

让我们说你在https://acme.com/order并且想付款,这样的代码片段是嵌入的:

<iframe src="https://pay.acme.com?amount=42+USD
                                 &returnUrl=https://acme.com/thankyou/[orderId]">
</iframe>

对于https://acme.com的开发人员来说,基本上是火上浇油。 iframe内部会发生什么。 https://pay.acme.com但现在担心:收集信用卡详细信息,验证它们,将用户重定向到银行页面以输入2FA代码或任何所需内容,等待付款获得批准,最后将用户移回returnUrl通过适当的跟踪确定付款的最终顺序(orderId)。

现在,pay.acme.com frontend <-> pay.acme.com backend沟通怎么样?让微服务与自身对话,或者更确切地说,即使是对API消费者没有任何意义的内部通信,也必须通过API网关吗?这当然是可能的,并且仍然保持微服务解耦并且不知道API网关,但这比偏离总是做约束并带来非常小的好处要花得多,因为我们不要# 39;目前使用任何高级限速或代理功能。

1 个答案:

答案 0 :(得分:1)

有简单的方法 - 拥有UI网关。代替API调用的网关将路由和代理资产请求调用(静态文件服务)。

如果实体属于相同的有界上下文(pay.acme.com frontend <-> pay.acme.com backend),那么它们肯定应该作为单个后端微服务存在,它服务于以下任何一个:

  • isomorphic js
  • 具有实时重新加载的瘦客户端应用程序(然后UI网关将需要代理ws连接)
  • 胖客户端应用程序(SPA)

这种微服务是常规的微服务,API(如果存在)应该可以通过API网关访问,UI应该通过UI代理/网关代理。

希望有所帮助。