柯里化提升API封装灵活性与复用性,核心是将多参数函数拆为单参数函数,提前固化baseURL、token等通用配置,调用时仅传业务参数;支持分层固化、Promise链式调用及合理参数排序。

柯里化能让 API 封装更灵活、复用性更高,核心是把多参数函数拆成多个单参数函数,让基础配置(如 baseURL、token)提前固化,调用时只需传业务参数。
用柯里化预置通用请求配置
把 axios 或 fetch 的通用配置(如 headers、baseURL)抽离为固定参数,后续每次调用只关心接口路径和业务数据。
- 例如封装一个带 token 和超时的请求函数:const request = curry((baseURL, timeout, headers, url, data) => {...})
- 再派生出具体服务:const userAPI = request('/api', 5000, { Authorization: 'Bearer xxx' })
- 调用时就简洁了:userAPI('/users', { id: 123 })
按模块分层柯里化,避免重复写配置
不同业务模块可能共用 baseURL 但 header 不同,可先固化 baseURL,再为各模块生成专属函数。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- const createAPI = (baseURL) => (headers) => (url, config) => axios({ baseURL, headers, url, ...config })
- const orderAPI = createAPI('https://api.example.com')({ 'X-App': 'order' })
- const productAPI = createAPI('https://api.example.com')({ 'X-App': 'product' })
结合 Promise 和 async/await 提升可读性
柯里化函数返回的是 Promise,天然适配 await,链式调用不打断语义。
立即学习“Java免费学习笔记(深入)”;
- const getUser = userAPI('/users/:id') → 返回一个可 await 的函数
- const user = await getUser({ params: { id: 1 } })
- 错误处理统一在上层 catch,不用每个接口都写 try/catch
注意参数顺序与占位设计
柯里化效果依赖参数顺序。建议把稳定参数(baseURL、token、method)放前面,动态参数(url、body、params)放后面。
- 反例:curry((url, token, data) => ...) → 每次都要重复传 token
- 正例:curry((token, baseURL, method) => (url, data) => ...) → 先固化认证和环境,再传业务参数
- 可用 placeholder(如 _)配合工具库(如 lodash/fp)跳过中间参数

















