0.0.13 • Published 1 year ago

ts-ma-util-rpc v0.0.13

Weekly downloads
-
License
MIT
Repository
-
Last release
1 year ago

MaHttpClient

1. 概述

MaHttpClient, 是基于三方库urllib实现的一个 HttpClient,应用可以使用MaHttpClient便捷地完成任何 HTTP 请求。

2. MaHttpClient具备的功能如下:

1. 封装发起http请求的get、post、put、delete方法
2. 区分data params参数
3. 支持接口代理
4. 支持自定义请求header
5. 支持设置请求超时间等配置信息

3. 参数data、param、query的区分

data: 请求的参数体 query: 请求url path上的值 params: 请求url路径问号后面的参数

```
假设请求的url为: 
const url =  '/v1/catalog/remove/:id?category=:category'

params = {category: 10 }
query = { id: 1 }

最终生产的url = '/v1/catalog/remove/1?category=10'

data、query、params 都是可选参数。

```

4. 应用

4.1 应用工程基于ma-core-mono库, 可直接使用

ma-core-mono工程已经集成了rpc库, 将rpc暴露的maHttpClient挂载在app实例上,访问方式app.maHttpClient, 所以基于ma-core-mono的工程可以直接使用rpc请求网络,具体使用方式如下:

```
this.app.maHttpClient.doGet({
    url: '',
    data: {},
    params: {},
    query: {},
});

其中请求的方法包含doGet、doPost、doPut、doDelete, 根据具体场景选择使用。
```

4.2 单独引用

```
// 引入
import { MaHttpClient } from '@ma-dev/ma-util-rpc'
// 实例化
const httpClient = new MaHttpClient({ httpClient: config });

其中config中的配置项都是可选项,HttpClient有一些默认的全局配如下, 若需覆盖这些默认配置,则可以通过new MaHttpClient实例时通过参数传入:
{
    request: {
        timeout: 3000 // 请求超时时间设置
    }
    headers: {}, // 通用的请求头设置
    enableDNSCache: false, // 是否开启本地DNS缓存
    dnsCacheLookupInterval: 10000,   // 对同一个域名进行DNS查询的最小间隔时间
    dnsCacheMaxLength: 1000, // DNS同时缓存的最大域名数量
    httpAgent: {
        // 默认开启http keepAlive
        keepAlive: true,
        // 空闲的KeepAlive socket最长可以存活的时间
        freeSocketKeepAliveTimeout: 4000,
        // 当socket超时没活动,会被处理掉
        timeout: 30000,
        // 允许创建的最大socket数
        maxSockets: Number.MAX_SAFE_INTEGER,
        // 最大空闲socket数
        maxFreeSockets: 256
        }
        httpsAgent: { /* 配置同httpAgent,不过是针对Https */ }
    };
    
// 调用对应方法doGet、doPost、doPut、doDelete
httpClient.doGet({
    url: '',
    data: {},
    params: {},
    query: {}
});

其中请求的方法包含doGet、doPost、doPut、doDelete, 根据具体场景选择使用。

```

5. 自定义header

   this.app.maHttpClient.doGet({
       url: '',
       data: {},
       headers: {          // 自定义header
           token: ''
       },
   });
   ```