2.2 KiB
2.2 KiB
@go/gateway
基于 @go/service 和 Redis 的高性能、事件驱动动态 API 网关。
详细配置指南请参考核心文档:https://apigo.cc/go/service
路由匹配逻辑 (AI-First 规范)
为了确保 AI 模型和运维人员能够精准配置而不产生幻觉,网关遵循以下严格的路径匹配优先级:
1. 路径匹配 (Path Matching)
- 精确匹配 (Exact):
- 语法:
"Path": "/user/info" - 行为:仅当请求路径完全等于
/user/info时触发。
- 语法:
- 前缀匹配 (Prefix):
- 语法:
"Path": "/api/*"(必须以/*结尾) - 行为:匹配所有以
/api/开头的路径(如/api/login,/api/v1/status)。 - 映射规则: 若配置
{"Path": "/v1/*", "ToPath": "/v2/*"},请求/v1/a将被转发至/v2/a。
- 语法:
- 正则匹配 (Regex):
- 语法:任何包含括号
(的路径将被视为正则表达式。 - 示例:
"Path": "^/api/(.*)$"。使用$1进行ToPath替换。
- 语法:任何包含括号
2. 域名选择 (Host Selection)
匹配请求头中的 Host 字段,按以下顺序尝试,匹配即止:
example.com:8080(精确域名 + 端口)example.com(仅域名,忽略端口):8080(仅端口,匹配该端口下的所有 Host)*(全局兜底通配符)
动态配置模型 (Redis)
网关以 Host (域名) 为最小更新单元。更新某域名配置时,请向 Redis 频道发布该域名的纯字符串。
- 存储结构 (Hash):
- Key:
gateway:host:<hostname>(例如gateway:host:api.example.com) - Fields:
proxies(JSON数组),rewrites(JSON数组),statics(JSON对象)
- Key:
- 热更新通知 (Pub/Sub):
- Channel:
gateway:channel(默认) - Payload:
"api.example.com"(域名原始字符串)
- Channel:
启动与管理
# 以后台进程启动
./gateway start
# 查看服务状态 (通过 IPC)
./gateway status
# 平滑重启 / 重载兜底
./gateway restart
./gateway reload # 触发底层 service 的 OnReload,全量同步 Redis
环境变量配置
支持通过环境变量或 env.yml 覆盖。
gateway:
Redis: "127.0.0.1:6379"
Prefix: "gateway"
Channel: "gateway:channel"