最佳实践
package version >0.4.0
shadcn any version
author: cmtlyt
update time: 2026/04/08 15:42:00
使用 apiController 的最佳实践和建议,帮助您编写更好的代码。
代码风格
1. 使用 defineApi 和 defineApiMap 获取更好的类型提示
2. 统一管理 API 配置
3. 使用 tdto 和 tvo 进行数据转换
4. URL 参数必须使用 Custom 方法
5. 使用完整 URL 避免路径拼接问题
6. 使用实例属性获取配置
项目结构
推荐的文件组织方式
性能优化
1. 复用 API 实例
2. 使用缓存策略
错误处理
1. 统一的错误处理
2. 重试机制
注意事项
⚠️ URL 参数
- URL 中包含
/:param格式的参数时,必须使用Custom方法调用 - 普通方法不支持 URL 参数,会抛出
TypeError - 调用时必须通过
params选项传递参数值 - params 支持
string和number类型,number 类型会自动转换为字符串 - URL 参数会自动进行编码,支持特殊字符、空格、中文等
- 数字 0 作为参数值是有效的,不会被 falsy 检查过滤
⚠️ 类型提示
- 建议使用
defineApi和defineApiMap定义配置,以获得更好的类型提示 - 不使用
defineApi定义带参数的 URL 时,会输出警告信息
⚠️ 请求模式
mock模式会使用onRequest返回的数据作为响应network模式会发送真实的网络请求- 可以通过
requestModeMap自定义请求模式 - 自定义请求模式会绕过默认的 hook 链
⚠️ 响应解析
- 默认使用
json解析器 parser为stream时返回ReadableStream,在某些情况下可能返回nullonResponse会覆盖parser的解析方式- 如果想要屏蔽
onResponse的继承,应该设置onResponse为null
🔧 Hook 执行顺序
数据转换 Hook 的执行顺序:
tdto- 请求前转换数据onRequest- 请求拦截onResponse/parser- 响应拦截/解析tvo- 响应后转换数据
⚠️ 路径拼接
- baseUrl 和 url 的拼接会自动处理重复的斜杠
- 支持相对路径和绝对路径
- 完整的绝对 URL 不需要 baseUrl
- 在 Node 环境中设置非绝对路径的 baseUrl 时,需要确保
location.origin可用
🔧 实例属性
$- 获取 API 配置对象$$- 获取默认配置(如果没有提供默认配置则为undefined)$$r- 获取实际应用的默认配置$updateBaseUrl- 动态更新 Base URL- 多次访问同一个 API 会返回相同的引用