1.0.4 • Published 3 years ago

honey-net v1.0.4

Weekly downloads
-
License
ISC
Repository
-
Last release
3 years ago

honey-net 接口请求库

目前接口请求响应格式分为两版:

  1. 旧版:海纳原有所有系统都采用这种格式
  2. 新版:遵循腾讯云apiv3规范

本接口请求库,通过封装,隐藏了不同接口格式的底层细节,提供统一的请求方式,响应结果,只需在初始化时选择对应的接口格式即可

安装方法

npm install --save "honey-net"

接口库初始化

NetV3是新版接口 NetV1是旧版接口

新版接口初始化方法

import { NetV3 as Net } from '@tencent/honey-net';
const api = new Net();
api.init({
  baseUrl: '/',
});

旧版接口初始化方法

import { NetV1 as Net } from '@tencent/honey-net';
const api = new Net();
api.init({
  baseUrl: '/',
});

init传入的参数

参数名传入值说明
errorHandler函数异常拦截器,除ApiError以外的异常,如网络异常等,返回true则不继续抛出
apiErrorHandler函数异常拦截器,只有ApiError异常会传入,返回true则不继续抛出
customHeaderHandler函数自定义header,函数应这么定义 headers => { / 加上自定义header /}
baseUrlurl请求接口根路径
timeout毫秒请求超时时间
requestHandlers数组请求处理器,可以传入多个处理函数
responseHandlers数组响应处理器,可以传入多个处理函数
suspendSyncTime布尔值默认为false

Net对象方法

NetV3.post

原始的post方法

不会对返回信息进行解析

import { NetV3 as Net } from '@tencent/honey-net';
const api = new Net();

const res = await api.post('/v1/getRole', {
  RoleID: 123
})

if (res.data) {
  // res.data 是接口返回的数据,需要自行解析,自行处理正常数据返回或者错误数据返回
}

NetV3.get

原始的get方法

不会对返回信息进行解析

import { NetV3 as Net } from '@tencent/honey-net';
const api = new Net();

const res = await api.get('/v1/getRole', {
  RoleID: 123
},{
  headers: {
    xxxx: 'xxx'
  },// 添加请求头等其他自定义参数
})

if (res.data) {
  // res.data 是接口返回的数据,需要自行解析,自行处理正常数据返回或者错误数据返回
}

NetV3.setToken

设置 jwt token 值

api.setToken('blah blah');

NetV3.easyPost

post方法

会对返回信息进行解析,如果接口返回正常数据,post函数返回值就是接口Response里的数据,如果接口返回错误,则会抛出ApiError 可通过ApiError的getCode和getMessage分别获得错误码和错误信息

import { NetV3 as Net, ApiError } from '@tencent/honey-net';
const api = new Net();

try {
  const res = await api.easyPost('/v1/getRole', {
    RoleID: 123
  })
  // 这里res就是接口返回的正常数据
} catch (err) {
  if (err instanceof ApiError) {
    // 错误码
    const code = err.getCode()
    // 错误信息
    const message = err.getMessage()
  }
}

NetV3.easyGet

get方法

会对返回信息进行解析,如果接口返回正常数据,get函数返回值就是接口Response里的数据,如果接口返回错误,则会抛出ApiError 可通过ApiError的getCode和getMessage分别获得错误码和错误信息

import { NetV3 as Net, ApiError } from '@tencent/honey-net';
const api = new Net();

try {
  const res = await api.easyGet('/v1/getRole', {
    RoleID: 123
  })
  // 这里res就是接口返回的正常数据
} catch (err) {
  if (err instanceof ApiError) {
    // 错误码
    const code = err.getCode()
    // 错误信息
    const message = err.getMessage()
  }
}

错误对象

ApiError

如果是接口返回的错误信息,easyPost和easyGet会抛出ApiError

ApiError有如下函数可以使用:

函数名函数功能
getCode获取错误码
getMessage获取错误描述文案
isAuthFailureInvalidSecretId密钥非法(不是云 API 密钥类型)。
isAuthFailureMFAFailureMFA 错误。
isAuthFailureSecretIdNotFound密钥不存在。
isAuthFailureSignatureExpire签名过期。
isAuthFailureSignatureFailure签名错误。
isAuthFailureTokenFailuretoken 错误。
isAuthFailureUnauthorizedOperation请求未 CAM 授权。
isDryRunOperationDryRun 操作,代表请求将会是成功的,只是多传了 DryRun 参数。
isFailedOperation操作失败。
isInternalError内部错误。
isInvalidAction接口不存在。
isInvalidParameter参数错误。
isInvalidParameterValue参数取值错误。
isLimitExceeded超过配额限制。
isMissingParameter缺少参数错误。
isNoSuchVersion接口版本不存在。
isRequestLimitExceeded请求的次数超过了频率限制。
isResourceInUse资源被占用。
isResourceInsufficient资源不足。
isResourceNotFound资源不存在。
isResourceUnavailable资源不可用。
isUnauthorizedOperation未授权操作。
isUnknownParameter未知参数错误。
isUnsupportedOperation操作不支持。
isUnsupportedProtocolHTTPS 请求方法错误,只支持 GET 和 POST 请求。
isUnsupportedRegion接口不支持所传地域。

使用Demo

下面以post请求(新版)

假设接口定义如下:

请求路径:

method: POST

path: /v1/GridPCSvr/DescribeRoleList

请求参数:

{
  "RequestId": "xxx",
  "RoleID": "1001",
  "Offset": 0,
  "Limit": 10
}

接口返回:

{
  "Response": {
    "TotalNum":143,
    "RoleMemberList":[{
      "UserName":"张三",
      "UserID":"XXX",                    
      "CreateTime":"2020-12-02 19:03:21",
      "Phone":"13923882323",
    }]
  }
}

可以如下请求

import { NetV3 as Net } from '@tencent/honey-net';
const api = new Net();
api.init({
  baseUrl: '/',
});

async function getRoleList(params) {
  try {
    const roleListData = await api.easyPost('/v1/GridPCSvr/DescribeRoleList', params);

    return roleListData;
  } catch (error) {
    // ApiError 是接口返回错误信息,需要继续抛出去给业务逻辑
    if (error instanceof ApiError) {
      if (error.isAuthFailureTokenFailure()) {
        // token 失效了
        // 处理token失效的逻辑
      } else {
        // 其他错误
        // 如果无法处理则继续抛出错误
        throw error
      }
    }
    console.error(error.message);
  }
  return null;
}

// 这里无需存入RequestId,接口库会自动带上
const resData = await getRoleList({
  "RoleID": "1001",
  "Offset": 0,
  "Limit": 10
})