miniprogram-request
Version:
A better Request package for MiniProgram API
297 lines • 13 kB
TypeScript
import { BaseConfiguration, ExtraConfiguration, LifeCycle, SuccessParam } from 'miniprogram-network-life-cycle';
import { GeneralCallbackResult, ParamsType } from 'miniprogram-network-utils';
/**
* 小程序HTTP 请求生命周期封装
* @example
* `const http = new Http({ baseURL: 'https://api.newfuture.cc/', retry: 3 });`
* @template TExt 扩展参数属性类型
*/
export declare class Http<TExt extends {} = {}> extends LifeCycle<TExt & wx.RequestOption, wx.RequestTask, RequestInit<TExt>, FullRequestOption<TExt>> {
/**
* 新建 Http实列
* @param config 全局默认配置
* @param request 请求处理方法,默认使用请求队列处理
* @param listeners 请求事件监听
*/
constructor(config?: RequestInit<TExt>, request?: (o: TExt & wx.RequestOption) => wx.RequestTask, listeners?: Http<TExt>['Listeners']);
/**
* Object 参数发起请求
* @param options 每个请求的全部配置信息,未设置内容使用默认全局配置
* @template TReturn Promise 返回的格式类型,默认返回微信原始返回数据格式
* @template TData request请求参数的格式类型,默认 any
* @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
*/
request<TReturn = SuccessParam<wx.RequestOption>, TData extends BaseData = BaseData, TParams = ParamsType>(options: RequestOption<TData, TParams, TExt, TReturn>): Promise<TReturn>;
/**
* 发送一个 request请求
* @param method 操作方法,和小程序一致
* @param action 请求操作URL,支持{name}格式参数
* @param data 可转未query string
* @param config 可覆盖默认配置
* @template TReturn Promise 返回的格式类型,默认返回微信原始返回数据格式
* @template TData request请求参数的格式类型,默认 any
* @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
*/
request<TReturn = SuccessParam<wx.RequestOption>, TData extends BaseData = BaseData, TParams = ParamsType>(method: NonNullable<wx.RequestOption['method']>, action: string, data?: TData, config?: RequestConfig<TParams, TExt, TReturn>): Promise<TReturn>;
/**
* GET 操作
* @param action 请求操作URL,支持{name}格式参数
* @param data 可转为query string
* @param config 可覆盖默认配置
* @template TReturn Promise 返回的格式类型,默认返回微信原始返回数据格式
* @template TData get query data请求参数的格式类型,默认 any
* @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
*/
get<TReturn = SuccessParam<wx.RequestOption>, TData extends BaseData = BaseData, TParams = ParamsType>(action: string, data?: TData, config?: RequestConfig<TParams, TExt, TReturn>): Promise<TReturn>;
/**
* POST 操作
* @param action 请求操作URL,支持{name}格式参数
* @param data 操作数据,默认会以json方式上传
* @param config 可覆盖默认配置
* @template TReturn Promise 返回的格式类型,默认返回微信原始返回数据格式
* @template TData post data参数格式类型,默认 any
* @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
*/
post<TReturn = SuccessParam<wx.RequestOption>, TData extends BaseData = BaseData, TParams = ParamsType>(action: string, data?: TData, config?: RequestConfig<TParams, TExt, TReturn>): Promise<TReturn>;
/**
* PUT 操作
* @param action 请求操作URL,支持{name}格式参数
* @param data 操作数据,默认会以json方式上传
* @param config 可覆盖默认配置
* @template TReturn Promise 返回的格式类型,默认返回微信原始返回数据格式
* @template TData post data数据格式类型,默认 any
* @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
*/
put<TReturn = SuccessParam<wx.RequestOption>, TData extends BaseData = BaseData, TParams = ParamsType>(action: string, data?: TData, config?: RequestConfig<TParams, TExt, TReturn>): Promise<TReturn>;
/**
* DELETE 操作
* @param action 请求操作URL,支持{name}格式参数
* @param data 可转为query string
* @param config 可覆盖默认配置
* @template TReturn Promise 返回的格式类型,默认返回微信原始返回数据格式
* @template TData put query data参数格式类型,默认 any
* @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
*/
delete<TReturn = SuccessParam<wx.RequestOption>, TData extends BaseData = BaseData, TParams = ParamsType>(action: string, data?: TData, config?: RequestConfig<TParams, TExt, TReturn>): Promise<TReturn>;
/**
* HEAD 操作
* @param action 请求操作URL,支持{name}格式参数
* @param data 可转为query string
* @param config 可覆盖默认配置
* @template TReturn Promise 返回的格式类型,默认返回微信原始返回数据格式
* @template TData head query data参数格式类型,默认 any
* @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
*/
head<TReturn = SuccessParam<wx.RequestOption>, TData extends BaseData = BaseData, TParams = ParamsType>(action: string, data?: TData, config?: RequestConfig<TParams, TExt, TReturn>): Promise<TReturn>;
/**
* Patch 操作
* 由于小程序不支持PATCH 方法
* 采用X-HTTP-Method-Override兼容处理,需要服务器端支持
* @param action 请求操作URL,支持{name}格式参数
* @param data 操作数据,默认会以json方式上传
* @param config 可覆盖默认配置
* @template TReturn Promise 返回的格式类型,默认返回微信原始返回数据格式
* @template TData patch data参数格式类型,默认 any
* @template TParams 路径参数(如`/items/{id}`或者`/{0}/{1}`)的格式类型,默认 任意object或数组
*/
patch<TReturn = SuccessParam<wx.RequestOption>, TData extends BaseData = BaseData, TParams = ParamsType>(action: string, data?: TData, config?: RequestConfig<TParams, TExt, TReturn>): Promise<TReturn>;
}
/**
* Request Data支持的全部数据格式
*/
declare type BaseData = string | object | ArrayBuffer | undefined;
/**
* 构造函数 默认配置信息
* (创建Request的配置信息)
*/
export interface RequestInit<T extends {} = {}, TReturn = any> extends BaseConfiguration<FullRequestOption<T>, T & wx.RequestOption, TReturn> {
/**
* response data type
*/
responseType?: 'json' | 'text' | 'arraybuffer';
}
/**
* 单个请求的额外配置信息
* @template TParams 参数类型
* @template TExt 扩展配置
*/
export declare type RequestConfig<TParams = ParamsType, TExt extends {} = {}, TReturn = HttpResponse> = Partial<TExt> & Partial<RequestInit<TExt, TReturn> & ExtraConfiguration> & {
/**
* 路径参数
* URL Path Params
* the path parameters to be replace in path
* Must be a plain `object` or `array`
* @example
* url = "/{ID}/status"
* param = {ID: 12345}
* request url will be /1234/status
*/
params?: TParams;
};
interface UniqueRequestOption<TData> {
/**
* 请求的地址
*/
url: string;
/**
* 请求方法
* HTTP request mthod: GET POST ...
*/
method?: wx.RequestOption['method'];
/**
* 请求数据
* reqeust data
* * **data 数据说明:**
*
* 最终发送给服务器的数据是 String 类型,如果传入的 data 不是 String 类型,会被转换成 String 。转换规则如下:
*
* * 对于 `GET` 方法的数据,会将数据转换成 query string(encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)
* * 对于 `POST` 方法且 `header['content-type']` 为 `application/json` 的数据,会对数据进行 JSON 序列化
* * 对于 `POST` 方法且 `header['content-type']` 为 `application/x-www-form-urlencoded` 的数据,会将数据转换成 query string
* (encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)
*/
data?: TData;
}
/**
* 每个HTTP Request请求的全部可配置信息
* @template TData 数据data的类型限制
* @template TParams 参数类型
* @template TExt 扩展信息
*/
export declare type RequestOption<TData extends BaseData = BaseData, TParams = ParamsType, TExt extends {} = {}, TReturn = HttpResponse> = RequestConfig<TParams, TExt, TReturn> & UniqueRequestOption<TData>;
/**
* 发送一个请求的完整可配置信息
* @template TExtend 扩展信息
* @template TData 数据data的类型限制
*/
export interface FullRequestOption<TExtend extends {} = {}, TData extends BaseData = BaseData, TReturn extends any = any> extends RequestInit<TExtend, TReturn>, ExtraConfiguration, UniqueRequestOption<TData> {
}
export declare namespace wx {
function request(option: RequestOption): RequestTask;
interface RequestOption {
/** 开发者服务器接口地址 */
url: string;
/** 响应的数据类型
*
* 可选值:
* - 'text': 响应的数据为文本;
* - 'arraybuffer': 响应的数据为 ArrayBuffer;
*
* 最低基础库: `1.7.0`
*/
responseType?: 'text' | 'arraybuffer';
/** 返回的数据格式
*
* 可选值:
* - 'json': 返回的数据为 JSON,返回后会对返回的数据进行一次 JSON.parse;
* - '其他': 不对返回的内容进行 JSON.parse;
*/
dataType?: 'json' | '其他';
/** HTTP 请求方法
*
* 可选值:
* - 'OPTIONS': HTTP 请求 OPTIONS;
* - 'GET': HTTP 请求 GET;
* - 'HEAD': HTTP 请求 HEAD;
* - 'POST': HTTP 请求 POST;
* - 'PUT': HTTP 请求 PUT;
* - 'DELETE': HTTP 请求 DELETE;
* - 'TRACE': HTTP 请求 TRACE;
* - 'CONNECT': HTTP 请求 CONNECT;
*/
method?: 'OPTIONS' | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'TRACE' | 'CONNECT';
/** 设置请求的 header,header 中不能设置 Referer。
*
* `content-type` 默认为 `application/json
*/
header?: object;
/**
* 请求的参数
*/
data?: string | object | ArrayBuffer;
/**
* 开启 http2
*/
enableHttp2?: boolean;
/**
* 开启 quic
*/
enableQuic?: boolean;
/**
* 开启 缓存
*/
enableCache?: boolean;
/**
* 开启 HttpDNS
*/
enableHttpDNS?: boolean;
/**
* HttpDNS 服务商 Id。 HttpDNS 用法详见 移动解析HttpDNS
*/
httpDNSServiceId?: string | boolean;
/**
* 开启 transfer-encoding chunked。
*/
enableChunked?: boolean;
/**
* 接口调用结束的回调函数(调用成功、失败都会执行)
*/
complete?(res: {
errMsg: string;
}): void;
/**
* 接口调用失败的回调函数
*/
fail?(res: {
errMsg: string;
}): void;
/**
* 接口调用成功的回调函数
*/
success?(result: HttpResponse): void;
}
interface RequestTask {
/** [RequestTask.abort()](RequestTask.abort.md)
*
* 中断请求任务
*
* 最低基础库: `1.4.0`
*/
abort(): void;
/** [RequestTask.onHeadersReceived(function callback)](RequestTask.onHeadersReceived.md)
*
* 监听HTTP Response Header 事件,会比请求完成事件更早
*
* 最低基础库: `2.1.0`
*/
onHeadersReceived(
/** HTTP Response Header 事件的回调函数 */
callback: (result?: {
header: object;
}) => void): void;
}
}
export interface HttpResponse extends GeneralCallbackResult {
/** 开发者服务器返回的 HTTP Response Header
*
* 最低基础库: `1.2.0`
*/
header: object;
/** 开发者服务器返回的 HTTP 状态码 */
statusCode: number;
/** 开发者服务器返回的数据 */
data: string | object | ArrayBuffer;
/**
* cookie信息2.4.2以上版本有
* 非正式支持
*/
cookies?: ({
domain: string;
httpOnly: boolean;
name: string;
path: string;
value: string;
} | string)[];
}
export {};
//# sourceMappingURL=http.d.ts.map