柯里化封装API请求可固化token、baseURL、headers等公共参数,使调用更简洁清晰;先传公共配置返回定制函数,再传路径与专属参数发起请求,支持多层柯里化按模块分组,提升复用性与可读性。

用柯里化封装 API 请求,可以把重复的公共参数(比如 token、baseURL、headers)提前固化,让每次调用更简洁、语义更清晰。
把公共配置固定下来
先写一个基础请求函数,接收所有参数;再用柯里化把它拆成两步:第一步传公共参数,返回一个新函数;第二步传接口专属参数(如 path、data)并发起请求。
- 公共参数包括:token、API 前缀、默认 headers
- 专属参数包括:路径、method、query、body
- 这样避免每个接口都重复写
headers: { Authorization: `Bearer ${token}` }
实现一个可柯里化的请求工厂
下面是一个轻量但实用的示例:
const createRequest = (baseURL, token) => {
const defaultHeaders = {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
};
return (path, options = {}) => {
const url = `${baseURL}${path}`;
const config = {
method: 'GET',
headers: { ...defaultHeaders, ...options.headers },
...options
};
if (config.body && typeof config.body === 'object') {
config.body = JSON.stringify(config.body);
}
return fetch(url, config);
};
};
// 使用:先固化 base 和 token
const api = createRequest('https://api.example.com', 'abc123');
// 后续调用干净利落
api('/users').then(r => r.json());
api('/posts', { method: 'POST', body: { title: 'Hello' } });
支持多层柯里化(按模块分组)
如果项目大,还可以再加一层柯里化,按业务模块组织:
立即学习“Java免费学习笔记(深入)”;
- 第一层:传 baseURL 和 token → 得到模块工厂
- 第二层:传模块前缀(如
/users)→ 得到模块专用函数 - 第三层:传具体接口路径和参数 → 发起请求
例如:userApi('/123').delete() 或 postApi('/draft').put({ content }),逻辑复用高,调用像调用对象方法一样自然。
配合 async/await 更友好
柯里化不改变异步本质,但能让 await 写法更顺滑:
const api = createRequest('/api', token);
// 直接 await,不用再包一层 async 函数
const data = await api('/profile').then(r => r.json());
const res = await api('/orders', { method: 'POST', body: order }).then(r => r.json());
不复杂但容易忽略:柯里化只是函数拆分,真正减少重复的是“把不变的部分提前确定”,而不是语法炫技。只要公共参数稳定,它就能让接口调用变得更专注、更少出错。


















