07.1
网络层职责
集中管理请求构造、解析、错误归一化、鉴权与缓存,UI 只说"我要用户",拿到类型安全模型。
分层
传输层(http/axios)→ 接口层(API 声明)→ 仓储层(转领域模型)。接口层用接口描述,便于 Mock。
07.2
http 基础
用 @ohos.net.http 创建请求,配置 URL/方法/头,await 获取响应与状态码。
import http from '@ohos.net.http'
const req = http.createHttp()
const res = await req.request('https://api.example.com/users/42', { method: http.RequestMethod.GET })
if (res.responseCode === 200) { const data = JSON.parse(res.result as string) }
req.destroy()07.3
axios 封装
@ohos/axios 提供 Promise 风格 API,可集中配置 baseURL、拦截器与超时。
import axios from '@ohos/axios'
const client = axios.create({ baseURL: 'https://api.example.com', timeout: 10000 })
client.interceptors.request.use((cfg) => { cfg.headers.Authorization = 'Bearer '+token; return cfg })
const { data } = await client.get<User>('/users/42')07.4
JSON 解析
用 class-transformer 或手动映射把 JSON 转成类型化模型;字段名不一致时用映射函数。
interface User { id: number; userName: string }
const user = JSON.parse(res.result as string) as User防御式解析
服务端字段漂移会抛解析异常。生产用可选字段 + 默认值,并 catch 上报,避免整页崩溃。
07.5
拦截与鉴权
用 axios 拦截器统一注入鉴权头、日志与错误处理,业务接口保持干净。
07.6
缓存与重试
弱实时数据可加本地缓存(Preferences/RDB)与指数退避重试,提升体验与韧性。
async function withRetry<T>(op: () => Promise<T>, n=3): Promise<T> {
for (let i=0;i<n;i++){ try { return await op() } catch(e){ if(i===n-1) throw e; await sleep(2**i*200) } }
throw new Error('unreachable')
}07.7
Mock 与测试
让 Repository 依赖接口,测试时注入返回假数据的实现,业务测试不触网。
07.8
常见陷阱
错误常被吞掉:解析失败、非 2xx 没拦截、超时未配置。统一在网络层 catch 并归一化为业务错误。
原生 http 请求对象需 destroy,否则会泄漏连接资源。用 axios 则交给其内部管理。
07.9