
1) 【一句话结论】设计API网关时,以Kong(基于Nginx的插件化网关)为核心,集成加权轮询负载均衡、OAuth2+API密钥双认证、令牌桶限流,通过CORS预检处理跨域,确保“大连海事就业”平台招聘API请求的高效、安全与可扩展。
2) 【原理/概念讲解】API网关是统一请求入口,负责请求分发与安全控制。
3) 【对比与适用场景】
| 对比项 | Nginx | Kong |
|---|---|---|
| 定义 | 轻量级反向代理,支持基础负载均衡 | 基于Nginx的开源API网关,插件系统 |
| 特性 | 简单高效,配置灵活,适合基础负载均衡 | 插件扩展(认证、限流、监控),支持复杂策略 |
| 使用场景 | 简单负载均衡,轻量级API管理(如小型招聘系统) | 复杂API网关,需要认证、限流、插件扩展(如企业用户多,需OAuth2,限流防攻击) |
| 注意点 | 需手动配置插件,功能扩展性有限;负载均衡算法需额外配置 | 插件可能增加复杂度,需合理选择插件,避免过度配置(如过度配置认证插件导致性能下降) |
4) 【示例】以Kong为例,配置加权轮询、OAuth2认证、令牌桶限流及CORS预检,并补充HTTPS配置(假设证书路径为/ssl/cert.pem)。
# 1. 负载均衡(加权轮询)
upstream backend {
servers:
- 192.168.1.1:8080 weight=3; # 企业A服务器,高负载
- 192.168.1.2:8080 weight=2; # 企业B
- 192.168.1.3:8080 weight=1; # 企业C
health_check path=/health check_type=HTTP
}
# 2. 认证插件(OAuth2)
plugins:
- name: oauth2
config:
client_id: "enterprise-client"
client_secret: "secret-key"
token_url: "https://auth.example.com/token"
scopes: "read write"
grant_type: "authorization_code"
# 3. 限流插件(令牌桶)
plugins:
- name: rate-limiting
config:
limit: 100 # 每秒请求数
period: 1s
# 4. CORS插件
plugins:
- name: cors
config:
allow_origin: "*"
allow_methods: "GET,POST,PUT,DELETE,OPTIONS"
allow_headers: "Content-Type,Authorization"
# 5. HTTPS配置(SSL插件)
plugins:
- name: ssl
config:
cert_file: /ssl/cert.pem
key_file: /ssl/key.pem
routes:
- paths: ["/api/recruitment"]
protocols: [http, https]
plugins:
- name: oauth2
- name: rate-limiting
- name: cors
- name: ssl
services:
- service: backend
5) 【面试口播版答案】面试官您好,设计API网关时,核心是构建统一入口处理招聘API请求。首先,功能上需负载均衡(采用加权轮询算法,根据后端服务器负载分配权重,比如高负载的企业服务器权重设为3,避免其过载)、认证授权(结合OAuth2授权码流程,企业申请授权码后用户授权获取访问令牌,请求时携带;同时支持API密钥,企业申请密钥后请求头携带,网关验证)、限流(使用令牌桶算法,每秒100请求,超限返回429并附带重试时间)。技术选型推荐Kong,因为它基于Nginx,支持插件扩展,能集成复杂功能。跨域处理上,通过CORS插件预检请求(OPTIONS方法),返回允许的请求头和方法,正常请求返回实际响应。这样能确保平台安全高效处理招聘API请求,支持高并发和不同企业的需求。
6) 【追问清单】
7) 【常见坑/雷区】