专栏名称: SegmentFault思否
SegmentFault (www.sf.gg)开发者社区,是中国年轻开发者喜爱的极客社区,我们为开发者提供最纯粹的技术交流和分享平台。
目录
相关文章推荐
51好读  ›  专栏  ›  SegmentFault思否

[译] 用 Node.js 搭建 API Gateway

SegmentFault思否  · 公众号  · 程序员  · 2017-09-10 08:00

正文

请到「今天看啥」查看全文


在微服务架构中,客户端可能会需要不同聚合程度的数据。 在这种情况下,我们可以使用 API Gateway 来解决这些依赖关系并从多个服务收集数据。

序列化格式转换

这种问题发生在不同客户端需要不同格式数据的需求中。

想象一下,在微服务中如果我们使用了 JSON,但是在某个客户端中只支持 XML 的 API,这个时候怎么办?我们完全可以把 JSON 转换 XML 这一过程放在 API Gateway 中,而不是在每个微服务中实现。

协议转换

微服务架构允许使用不同的协议以便于获得使用不同技术的优势。然而,大多数客户端只支持一种协议。在这种情况下,我们需要转换客户端的服务协议。

API Gateway 也可以成为介于客户端和微服务之间的一个协议转换层。

下面的图片中你可以看到,客户端只使用 HTTP REST 来和各种服务交换信息,而实际上我们内部的各种微服务可以基于不同的规范、协议来进行信息传递。

速率控制和缓存

除了身份验证之外,你还可以在 API Gateway 中实现速率限制,缓存和各种可靠性相关的功能。

过于庞大的 API Gateway

在实现 API Gateway 时,应当避免将非通用逻辑(如领域特定数据转换)放入其中。

服务应始终对其数据域拥有完全的所有权。 构建一个过于庞大的 API Gateway,从服务团队争夺控制权,这违反了微服务的理念。

这就是为什么你应该注意你的API网关中的数据聚合 —— 如果你明确它的职责,它可以是很强大的,应当避免在 API Gateway 中处理业务逻辑,是谁的事情就交给谁干,一定要明确其在整个架构中的角色。

Node.js Gateways

如果你希望在 API Gateway 中执行一些简单的操作,例如将请求路由到特定的服务,你可以使用像nginx这样的反向代理。 但在某些时候,你可能需要实现一般代理不支持的逻辑。 在这种情况下,你可以在 Node.js 中实现自己的 API Gateway。

在 Node.js 中,你可以使用 http-proxy 完成一些简单的代理请求的服务,当然也可以使用具有更多功能的 express-gateway。

在第一个 API Gateway 示例中,我们在其代理请求到真实的服务之前,先进行权限认证。

  1. const express = require('express')

  2. const httpProxy = require('express-http-proxy')  

  3. const







请到「今天看啥」查看全文