一个API网关,可以外部整合,安全化,管理 APIs。它是API消费者(客户端程序)和后端API提供者(API服务器)之间的中介。

df82b234-5ddb-463c-bf54-10d0af0535e9

API 网关的作用

功能 API网关作用
安全 在企业接入层作为第一个拦截器,建立用户标示前, 作为授权,认证,审计(AAA)的提供者或转发者
调停和转换 介导不同协议间,更换API 的payload(如 HTTP 头,HTTP 请求主体)为了不同的客户端API消费需求
基础服务质量 为API消费的客户端提供基础设施基本的功能如:分页,限制频率,缓存,分发保证,防火墙,等
监控和报表 通过监控APIs 和 注入元数据来报备如API 使用,健康度,等其他指标,来指导API实现服务级别协议(SLAs)
聚合 通过动态调用和构建把各个底层业务的细粒度的微服务 API 组合成粗粒度混搭式APIs
虚拟化 通过虚拟化API节点和作为API服务器节点实例的反向代理实现一个高可用,安全,可扩展的抽象层

API 网关是个挑战

  • 1 随着越来越多的老旧系统,云服务,移动设备,甚至是物联网,API 网关的挑战性呈指数级增长
  • 2 旧有API通过旧有服务被开发和暴露:
    • 建立在异构的平台和语言,由拥有不同技术技能的不同的团队开发
    • 在业务领域中没有被切分出离散原子性的边界,而是被构建成在一个业务领域的单块
    • 开发的时候没有考虑后续扩展,仅仅限制在当前的访问需求被静态的定义着
    • 并没有很好的文档化,内部随便的就发布了,通过口头交流
    • 不同服务和API有着不同的数据协议和格式,在集成时都遇到很大问题
  • 3 API网关的建设需要长期的磨合。因为它跨多个使用不同工具集和暴露不同风格接口的团队(开发者,运维,数据分析师)

API 网关组成

3b8fb21c-a3a0-4c5f-b0ee-c164e237d1a2

API 网关 管道的4个层级:

  • 传输层:监听传入的消息和解包他们为的请求对象。例如,接受HTTP请求,并产生HTTP响应(也可能是websocket)
  • 远程处理层:解析请求对象为Node.js对象(作为接收机和方法被调用)
  • 模型层:委派数据访问请求到连接器(connector)的实现
  • 接口层:分发CRUD等数据资源方法到数据库驱动程序(如JDB)来调用后端系统。

API 网关下的典型请求流程:

  1. 客户端应用程序从的OAuth 2.0授权服务器请求一个访问令牌。
  2. 客户端应用程序发送包含访问令牌的OAuth的2.0资源服务器API请求。
  3. 资源服务器验证的访问令牌(包括过期,范围,客户ID和资源拥有者),以允许或拒绝访问。如果拒绝,则错误响应被发送到客户端应用程序并且流程终止。
  4. 指标Metrics中间件捕获API使用和更新指标。
  5. 限频中间件查看API请求,并检查基于各种约束的频率限制(如服务器健康度,客户端级别等)。如果超过的限制之一,一个错误响应发送到客户端应用程序并且流程终止。
  6. 代理中间件查找路由配置,以决定该请求是否应该在本地处理还是转发到远程API服务器。
  7. API服务器处理该请求,并产生一个响应。
  8. 接收到代理中间件响应,然后送回原来的客户端应用程序。