如何创建供内部使用的API代理以调用需API Key的第三方服务?
内部API代理实现指南(对接需API Key的第三方服务)
核心逻辑说明
这个代理的核心作用就是做中间层:内部消费者只需要调用符合公司规范的代理端点,代理自动完成第三方API Key注入、请求转发,再把第三方的响应(或经过格式转换的响应)返回给内部用户。这样内部团队不用关心第三方服务的认证细节和原始端点,只需对接内部统一接口。
分步实现(以Node.js + Express为例)
1. 初始化项目
- 新建项目文件夹,执行初始化命令:
npm init -y - 安装依赖:Express用来搭建代理服务,Axios用来发起第三方请求
npm install express axios
2. 编写代理核心代码
创建index.js文件,实现请求转发和Key注入逻辑:
const express = require('express'); const axios = require('axios'); require('dotenv').config(); // 加载环境变量 const app = express(); const PORT = process.env.PORT || 3000; // 第三方服务配置(从环境变量读取,避免硬编码) const THIRD_PARTY_CONFIG = { apiKey: process.env.THIRD_PARTY_API_KEY, baseUrl: 'https://第三方服务域名/api' // 替换为实际第三方API地址 }; // 解析JSON请求体 app.use(express.json()); // 定义内部规范端点(示例:获取用户列表) app.get('/internal/users', async (req, res) => { try { // 向第三方发起请求,注入API Key(假设第三方用Header传Key,比如X-API-Key) const thirdPartyRes = await axios.get(`${THIRD_PARTY_CONFIG.baseUrl}/users`, { headers: { 'X-API-Key': THIRD_PARTY_CONFIG.apiKey }, params: req.query // 转发内部请求的查询参数 }); // 直接返回第三方响应,也可在此处做格式转换适配公司规范 res.status(thirdPartyRes.status).json(thirdPartyRes.data); } catch (err) { // 错误处理,返回友好的内部错误信息 const errStatus = err.response?.status || 500; const errMsg = err.response?.data?.message || '第三方服务调用失败'; res.status(errStatus).json({ error: errMsg }); } }); // 支持POST请求的示例(比如创建资源) app.post('/internal/users', async (req, res) => { try { const thirdPartyRes = await axios.post(`${THIRD_PARTY_CONFIG.baseUrl}/users`, req.body, { headers: { 'X-API-Key': THIRD_PARTY_CONFIG.apiKey } }); res.status(thirdPartyRes.status).json(thirdPartyRes.data); } catch (err) { const errStatus = err.response?.status || 500; const errMsg = err.response?.data?.message || '创建资源失败'; res.status(errStatus).json({ error: errMsg }); } }); // 启动服务 app.listen(PORT, () => { console.log(`内部API代理已启动,端口:${PORT}`); });
3. 配置环境变量(关键:保护API Key)
- 创建
.env文件,存储敏感配置:THIRD_PARTY_API_KEY=你的第三方API密钥 PORT=3000 - 安装
dotenv依赖来加载环境变量:npm install dotenv
4. 测试代理服务
- 启动代理:
node index.js - 内部消费者调用代理端点测试:
# GET请求示例 curl http://localhost:3000/internal/users?page=1 # POST请求示例 curl -X POST http://localhost:3000/internal/users -H "Content-Type: application/json" -d '{"name":"张三"}' - 验证:第三方服务后台应能看到正确的API Key,内部消费者能收到第三方的响应。
5. 内部部署
- 用PM2管理进程(保证服务稳定运行):
npm install pm2 -g pm2 start index.js --name internal-api-proxy - 配置内部访问:通过公司内部DNS、Nginx反向代理等方式,让内部用户可以通过规范域名访问(比如
https://internal-api.yourcompany.com/users)
额外注意事项
- 安全优先:绝对不要把API Key硬编码到代码或提交到版本控制,用环境变量、配置中心(如Consul)管理敏感信息。
- 请求适配:根据第三方服务的认证方式调整Key注入位置(比如有的服务用
Authorization: Bearer {Key},有的用Query参数)。 - 格式转换:如果第三方响应格式不符合公司规范,可在代理层做字段映射、结构调整。
- 限流与监控:给代理端点添加限流(如用
express-rate-limit),避免第三方服务被内部请求压垮;同时添加日志和监控,方便排查问题。 - 容错处理:可添加重试机制(如用
axios-retry),处理第三方服务的临时故障。
内容的提问来源于stack exchange,提问作者André Luis Reis Lopes
相关产品推荐
相关产品推荐

