work 1.0.0 copy "work: ^1.0.0" to clipboard
work: ^1.0.0 copied to clipboard

outdated

Encapsulate http business interface protocol, provide limited extension functions, isolate the underlying implementation method of http (currently based on dio).

work #

pub package

  • 封装http业务接口协议,提供有限的扩展功能,隔离http底层实现方法(当前基于dio),与公司http规范紧密结合,规范团队成员接口编写和使用方式。
  • 核心设计理念为封装http接口的请求数据和响应数据的序列化和反序列化,接口调用处不能出现任何解析http数据的代码。 装配和解析代码应该全部由Work类完成,接口调用处使用一致的调用方式,无需关心http的实现方式和接口参数拼装细节,
  • 此设计的缺点是丢弃了一些不常用的http底层实现工具的灵活扩展功能, 优点是规范团队接口编写方式,统一项目http接口代码风格。

与1.0.0以下版本不兼容 #

Usage #

实现公司http规范基类 #

模仿simple_work.dart中的样板来实现一个Work基类,用于关联自己公司的固定接口规范。

SimpleWork类为一个样例实现,所使用的公司接口规范如下

所有接口响应数据格式

{
  "state":true, // 业务的成功失败标志
  "errorCode":0, // 错误码
  "message":null, // 业务消息字符串,可以是成功时用于显示的信息,也可以是失败时的提示信息
  "result": {}  // 真正响应的有效业务数据,任意类型
}

增加接口 #

继承公司http规范基类,比如SimpleWork<T>

<T>为真正需要返回的数据模型类

1.0.0版开始数据填充接口onFillParams签名变更,使用更加友好,同时更方便与json_serializable 库结合使用

示例


@JsonSerializable()
class LoginWork extends SimpleWork<User> {
  LoginWork({this.username, this.password});
  
  final String username;
  
  final String password;

  String get device => Platform.isIOS ? "Ios" : "Android";
  
  @override
  User onExtractResult(resultData,SimpleWorkData<User> data) => User.fromJson(resultData);
  // 解析响应数据

  /// 装配请求参数
  /// 
  /// 返回发送的参数集合,可以和[json_serializable]库配合使用,也可以简单的直接拼装
  @override
  Map<String, dynamic> onFillParams() => _$LoginWorkToJson(this);
  // 简单的参数直接拼接
  // @override
  // Map<String, dynamic> onFillParams() => {
  //  'username': username,
  //  'password': password,
  //  'device': device,
  // };
  //

  @override
  String onUrl() => "https://xxx/user/login";
  // 地址可以是完整地址,支持baseUrl,需调用[mergeBaseOptions]设置

  @override
  HttpMethod onHttpMethod() => HttpMethod.post; // 使用post请求
}

调用接口 #


// 创建work实例并执行start发起请求,一个work实例仅能执行一次请求,多次调用start总是返回第一次执行的Future
// [onProgress]为进度监听器,在[HttpMethod.download]请求中为下载进度,在其他类型请求中为上传/发送进度。
LoginWork(username: 'user1', password: '123456').start().then((data){
   // start方法返回Future<T> ,T为[SimpleWorkData]类

   if (data.success){
      // 登录成功
      final user = data.result;
   }else{
      // 登录失败
   }
});

支持请求类型 #

  • HttpMethod中的类型,getpostputdeleteheaduploaddownload
  • 其中upload 基于postmultipart/form-data实现,参数中的文件需要用FileUploadFileInfo类型包装,支持文件列表
  • download默认使用get请求,且由于download特殊性,需要使用独立于其他Work的实现方式,参考SimpleDownloadWork

其他Work生命周期函数 #

Work中还有很多生命周期方法,用于做有限的接口扩展和定制,原则是接口数据处理由接口自己(即Work)处理。

1
likes
0
points
526
downloads

Publisher

unverified uploader

Weekly Downloads

Encapsulate http business interface protocol, provide limited extension functions, isolate the underlying implementation method of http (currently based on dio).

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

dio, flutter, http_parser, meta, mime, path

More

Packages that depend on work