Skip to content

构造 URL、请求头与请求体

前提

使用第一个请求的 ESM TypeScript 项目并运行本地服务。用下面的完整请求替换客户端调用;夹具仅接受不带查询参数的 /users/1

定位资源

ts
import { Fetcher, ResultExtractors } from '@ahoo-wang/fetcher';

const api = new Fetcher({ baseURL: 'http://127.0.0.1:8787' });
const user = await api.get<{ id: number; name: string }>(
  '/users/{id}',
  {
    urlParams: { path: { id: 1 } },
    headers: { Accept: 'application/json' },
  },
  { resultExtractor: ResultExtractors.Json },
);
console.log(user.name);

最终路径是 /users/1,输出为 Ada。路径值填充 URI 模板占位符。对于支持资料展开的业务端点,在 urlParams 中与 path 并列添加 query: { include: 'profile' },地址会成为 /users/1?include=profile。查询值编码为 URL 参数。该变体需要业务服务;精确匹配的教程夹具会为它返回 404。若服务要求在查询参数中传 JSON,请显式序列化嵌套业务对象。

发送请求体

对于实现了 POST /users 并返回新用户 JSON 的业务服务,调用:

ts
const created = await api.post<{ id: number; name: string }>(
  '/users',
  { body: { name: 'Lin' } },
  { resultExtractor: ResultExtractors.Json },
);
console.log(created.id);

这一步需要集成服务:本地教程服务没有创建路由。请实现该路由或使用真实 API。请求体拦截器将对象序列化为 JSON。使用 FormDataBlobURLSearchParams 时直接作为 body 传入;拦截器移除显式 Content-Type,让原生传输设置正确格式或 boundary。字符串与二进制请求体不会被转换成 JSON 对象。

检查结果与处理失败

通过浏览器开发者工具或服务测试检查最终 URL、方法、请求头与序列化请求体。请求头按大小写不敏感的名称合并,请求级值优先;使用支持的头部输入,不要展开 Headers 实例。在调用处处理序列化、传输、HTTP 状态和 JSON 解析失败。POST 是写操作,结果不确定时应先确认服务端幂等契约再重试。

这些 JSON 调用不创建监听器。测试结束后停止本地夹具;通过取消指南停止不再需要的活动请求。

参阅请求输入URL 规则请求生命周期

基于 Apache License 2.0 发布。