Home Reference Source
public class | source

BackendApi

Direct Subclass:

WeappBackendApi

统一封装后端接口的调用

  • 集中配置接口
  • 统一发送请求
  • 统一处理请求的返回
  • 统一适配请求返回的数据格式
  • 统一异常处理
  • 预留扩展点

此类是抽象类, 其他平台继承此类来实现具体发送请求的功能 例如: BackendApi -> WeappBackendApi(微信小程序平台的封装) -> Web$BackendApi(Web平台, 基于jQuery/Zepto的封装)

Constructor Summary

Public Constructor
public

constructor(apiConfig: object, defaultRequestOptions: object, loggerLevel: number)

Member Summary

Public Members
public
public
public
public

logger: *

public

sending: {}

public

stalled: *[]

Method Summary

Public Methods
public abstract

$sendHttpRequest(requestOptions: object): Promise

发送 HTTP 请求的具体实现

public

addApiConfig(namespace: string | object, apiConfig: object): BackendApi

添加一组后端 HTTP 接口的配置

public abstract

afterSend(requestOptions: object, requestResult: object)

请求结束后的统一处理

public abstract

beforeSend(requestOptions: object): undefined | Promise

发送请求前的统一处理

public

loadApiConfig(requestOptions: object): Promise

加载后端 HTTP 接口的配置

public

normalizeRequestResult(requestOptions: any, requestResult: any): any

标准化接口返回的数据格式, 方便适配各种接口返回数据格式不同的情况

public

sendRequest(name: string, options: object, namespace: string): Promise

统一发送(接口)请求的方法

Private Methods
private

_getRequestOptions(name: string, options: object, namespace: string): object

获取请求的参数

Public Constructors

public constructor(apiConfig: object, defaultRequestOptions: object, loggerLevel: number) source

Params:

NameTypeAttributeDescription
apiConfig object

后端 HTTP 接口的配置, 将 HTTP 接口的调用视为一次远程调用(RPC) 配置项是接口名称和请求参数的映射 例如

   ```javascript
   {
       'getList': {
           method: 'GET',
           url: 'https://domain.com/list'
       },
       'getDetail': {
           method: 'GET',
           url: 'https://domain.com/detail'
       }
   }
   ```
defaultRequestOptions object

默认的请求参数

loggerLevel number

日志级别, 默认为 Logger.LEVEL_WARN 级别 TODO: 如果微信小程序支持获取当前运行的版本(开发版/体验版/线上版), 那么日志级别的默认值可以根据运行的版本来判断, 非线上版本自动为 TRACE 级别

Public Members

public apiConfig: * source

public defaultRequestOptions: * source

public loading: boolean source

public logger: * source

public sending: {} source

public stalled: *[] source

Public Methods

public abstract $sendHttpRequest(requestOptions: object): Promise source

发送 HTTP 请求的具体实现

Params:

NameTypeAttributeDescription
requestOptions object

请求参数

Return:

Promise

public addApiConfig(namespace: string | object, apiConfig: object): BackendApi source

添加一组后端 HTTP 接口的配置

Params:

NameTypeAttributeDescription
namespace string | object
  • optional

给接口名添加 namespace, 例如: 给 'getUser' 添加 'user' 的 namespace, 接口名会变为 'user.getUser'; 如果参数为 object 类型, 则表示直接添加接口配置, 不设置 namespace

apiConfig object

Return:

BackendApi

this

public abstract afterSend(requestOptions: object, requestResult: object) source

请求结束后的统一处理

Params:

NameTypeAttributeDescription
requestOptions object
requestResult object

public abstract beforeSend(requestOptions: object): undefined | Promise source

发送请求前的统一处理

Params:

NameTypeAttributeDescription
requestOptions object

Return:

undefined | Promise

public loadApiConfig(requestOptions: object): Promise source

加载后端 HTTP 接口的配置

Params:

NameTypeAttributeDescription
requestOptions object

请求参数

Return:

Promise

public normalizeRequestResult(requestOptions: any, requestResult: any): any source

标准化接口返回的数据格式, 方便适配各种接口返回数据格式不同的情况

标准格式为:

{
    "data": {},
    "status": 0,
    "statusInfo": {
        "message": "给用户的提示信息",
        "detail": "用于排查错误的详细错误信息"
    }
}

Params:

NameTypeAttributeDescription
requestOptions any
requestResult any

Return:

any

See:

public sendRequest(name: string, options: object, namespace: string): Promise source

统一发送(接口)请求的方法

Params:

NameTypeAttributeDescription
name string

接口的名称

options object
  • optional
  • default: {}

请求参数

namespace string
  • optional
  • default: ''

接口名的 namespace

Return:

Promise

Private Methods

private _getRequestOptions(name: string, options: object, namespace: string): object source

获取请求的参数

Params:

NameTypeAttributeDescription
name string

接口的名称, 既配置在 apiConfig 中的 key 针对接口 URL 中有 path 参数的情况, 需要在 name 中加入斜杠来标识, 如果不使用这个参数, 也可以发请求, 但不推荐这么使用, 应该将所有接口都配置好

options object

请求参数

namespace string

接口名的 namespace

Return:

object