后端 responseOK
HTTP 200{
"status": 200,
"body": {
"code": 200,
"msg": "ok",
"data": {
"id": 42,
"name": "Ada"
}
}
}这个页面直接在浏览器运行仓库里的 createHttp。场景数据经过真实 hooks、response policy 和 error pipeline。
选择一种后端响应,运行仓库里的真实 createHttp,对比原始 response 与 Promise resolve/reject 的最终结果。
createHttp()HTTP 200{
"status": 200,
"body": {
"code": 200,
"msg": "ok",
"data": {
"id": 42,
"name": "Ada"
}
}
}等待运行// 运行后在这里查看 resolve 值或 BizErrorHTTP 200 加明确配置的 { code, msg, data } policy,最终 resolve 的值是 User。
HTTP 请求成功,业务 code 失败,Promise reject 为 BizError。直接使用 axios 时,这类 response 会 resolve。
省略 envelope 后返回解析完成的 body,成功与否只看 HTTP status。
Envelope map 读取 errno、errmsg 和 result,API 函数不用跟着后端字段改名。
HTTP status 优先。body 里残留的 code: 200 不会把 HTTP 503 变成成功。
Demo 注入一个小型 adapter,再交给配置的 hooks、response policy 和 error pipeline。
const adapter: Adapter = {
name: "protocol-lab",
async request() {
return {
status: scenario.status,
statusText: scenario.statusText,
headers: { "x-demo": "protocol-lab" },
body: scenario.body,
};
},
};
const client = createHttp({
adapter,
envelope: scenario.envelope,
});
const result = await client.get<User>("/demo");axios、native fetch、ofetch、native bridge 和测试 adapter 都遵守这份 contract。