HTTP Client
HTTP Client 是一个基于 Axios 的 HTTP 客户端工具包,它提供了更简洁的 API 和更好的类型支持。
特性
- 基于 Axios 的 HTTP 客户端
- 支持请求和响应拦截器
- 支持配置合并
- 提供完整的 TypeScript 类型支持
- 支持自定义实例配置
- 支持导出底层 Axios 实例
安装
npm install @kazura/http-client
使用方法
基本用法
import HttpClient from '@kazura/http-client'
// 创建 HTTP 客户端实例
const http = HttpClient.create({
baseURL: 'https://api.example.com',
timeout: 5000,
})
// 发送 GET 请求
const response = await http.request({
method: 'GET',
url: '/users',
})
// 发送 POST 请求
const data = await http.request({
method: 'POST',
url: '/users',
data: {
name: 'John',
age: 30,
},
})
使用拦截器
const http = HttpClient.create()
// 添加请求拦截器
http.interceptors.request.use(
(config) => {
// 在发送请求之前做些什么
config.headers.Authorization = `Bearer ${token}`
return config
},
(error) => {
// 对请求错误做些什么
return Promise.reject(error)
}
)
// 添加响应拦截器
http.interceptors.response.use(
(response) => {
// 对响应数据做点什么
return response.data
},
(error) => {
// 对响应错误做点什么
return Promise.reject(error)
}
)
合并配置
const http = HttpClient.create({
baseURL: 'https://api.example.com',
})
// 合并新的配置
http.mergeConfig({
timeout: 10000,
headers: {
'Content-Type': 'application/json',
},
})
API 参考
构造函数
constructor(config: HttpRequestConfig = {})
参数:
config
: HTTP 请求配置对象
静态属性
http: HttpStatic
- Axios 静态实例
静态方法
create
static create(config?: HttpRequestConfig): HttpClient
创建一个新的 HTTP 客户端实例。
参数:
config
: HTTP 请求配置对象(可选)
返回值:
- HTTP 客户端实例
mergeConfig
static mergeConfig(config1: HttpRequestConfig, config2: HttpRequestConfig): HttpRequestConfig
合并两个配置对象。
参数:
config1
: 第一个配置对象config2
: 第二个配置对象
返回值:
- 合并后的配置对象
实例方法
request
request<T = any, D = any, R = HttpResponse<T, D>>(config: HttpRequestConfig<D>): Promise<R>
发送 HTTP 请求。
参数:
config
: HTTP 请求配置对象method
: 请求方法url
: 请求 URLdata
: 请求数据params
: URL 参数- 其他 Axios 配置选项...
返回值:
- Promise 对象,解析为响应数据
mergeConfig
mergeConfig(config: HttpRequestConfig): void
合并新的配置到当前实例。合并后会重新创建 Axios 实例,但会保留原有的拦截器。
参数:
config
: 要合 并的配置对象
exportHttpInstance
exportHttpInstance(): HttpInstance
导出底层的 Axios 实例。
返回值:
- Axios 实例
属性
interceptors
- 请求和响应拦截器
类型定义
HttpStatic
interface HttpStatic extends AxiosStatic {}
Axios 静态类型。
HttpInstance
interface HttpInstance extends AxiosInstance {}
Axios 实例类型。
HttpRequestConfig
interface HttpRequestConfig<D = any> extends AxiosRequestConfig<D> {}
HTTP 请求配置类型。
CreateHttpDefaults
interface CreateHttpDefaults<D = any> extends CreateAxiosDefaults<D> {}
创建 HTTP 客户端默认配置类型。
HttpResponse
interface HttpResponse<T = any, D = any> extends AxiosResponse<T, D> {}
HTTP 响应类型。
InternalHttpRequestConfig
interface InternalHttpRequestConfig<D = any> extends InternalAxiosRequestConfig<D> {}
内部 HTTP 请求配置类型。
注意事项
- 合并配置时会重新创建 Axios 实例,但会保留原有的拦截器
- 使用 TypeScript 来获得更好的类型提示
- 可以通过
exportHttpInstance
方法获取底层的 Axios 实例 - 所有类型定义都继承自 Axios 的类型定义
示例
创建自定义实例
import HttpClient from '@kazura/http-client'
const http = HttpClient.create({
baseURL: 'https://api.example.com',
timeout: 5000,
headers: {
'Content-Type': 'application/json',
},
})
// 使用实例 发送请求
const response = await http.request({
method: 'GET',
url: '/users',
})
使用拦截器处理认证
import HttpClient from '@kazura/http-client'
const http = HttpClient.create()
// 添加认证拦截器
http.interceptors.request.use((config) => {
const token = localStorage.getItem('token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
})
// 添加错误处理拦截器
http.interceptors.response.use(
(response) => response,
(error) => {
if (error.response?.status === 401) {
// 处理未授权错误
localStorage.removeItem('token')
window.location.href = '/login'
}
return Promise.reject(error)
}
)
动态更新配置
import HttpClient from '@kazura/http-client'
const http = HttpClient.create({
baseURL: 'https://api.example.com',
})
// 更新超时时间
http.mergeConfig({
timeout: 10000,
})
// 更新请求头
http.mergeConfig({
headers: {
'X-Custom-Header': 'value',
},
})