API网关作为现代应用的流量入口,重要程度可想而知,其核心功能包括:认证鉴权、请求校验、URI重写、响应压缩、响应缓存、TLS卸载、流量控制、流量调度、日志监控、指标监控等。
在数亿的NGINX部署实例中,有约30%的实例被部署为API网关,其功能全面,性能强大,是API网关的绝佳选择,本项目将演示如何利用NGINX打造一个属于自己的API网关,并实现API网关的核心功能。
按照常规的软件产品研发流程,我们将按以下几个核心步骤完成API网关的开发:
规划API网关的功能特性,明确API网关的项目范围。
设计API网关的技术架构,通过数据面、控制面、管理面分离的方式实现API网关的功能、性能、安全性、稳定性、高可用等。
根据API网关的功能特性范围,选择合适的NGINX的功能模块和配置指令实现API网关的功能,并规划扩展性和可维护性,按照功能领域划分目录结构和配置结构。 更多细节可参考配置设计。
根据配置设计抽象出面向用户的功能配置模型,简化用户配置难度,并实现可视化、自动化配置能力。 更多细节可参考模型设计。
基于配置设计和模型设计,使用模板语言开发配置模板,最终能实现:配置模板+配置模型+配置数据=最终配置的能力。 更多细节可参考模版开发。
实现基于配置模型的自动化数据驱动测试能力,可批量自动化回归验证API网关的功能正确性。 更多细节可参考模版开发。
- config-design: 基于NGINX的API网关配置设计;
- config-model:基于Java实现的配置模型参考,可被视为API网关的管理面;
- config-templates:基于Go Template和Confd实现的API网关配置模板;
- backend-demo:基于Springboot实现的后端测试服务;