ResourceX 通过AFNetworking、YYModel 解析网络泛型编程简化网络请求

现如今,网络通信几乎涉及每一个app程序。对于绝大多数请求HTTP API的方法,它们的执行流程都可以分成三个不同的阶段。

这种代码通常有三个特点:

网络通信代码绝大部分的逻辑相同;

JSON序列化成Model会包含大量的类型转换;

为了处理各个环节可能发生的错误,会引入大量的optional操作;

这样的流程不仅每次获取到服务器数据后都会有大量的逻辑去处理服务器返回的JSON

于是,这部分功能很容易写出复杂臃肿的函数或者逻辑,但仔细看看却又觉得没什么更好的办法。这种函数不仅看上去不美观,也难以进行单元测试

Features

Fully build.

Simple interface.

Support access group and accessibility.

一. 通过泛型编程简化网络请求

通过泛型编程,把请求中的这三个过程真正抽象出来,以达到进一步解耦网络请求和业务逻辑代码的目的。

创建ResourceX 设置转换Model 去掉了获取复杂的获取json中逻辑,也去掉了json转为对应的model时处理逻辑

导入ResourceX

#import

//1. 创建ResourceX by通过key获取 数组ExpModel对象

ResourceX *netApi = [ResourceX yy_array_url:@"episodes" decoder:ExpModel.class by:@"episodes"];

//2. 发起请求

[netApi POST_AF:@{}];

//3. 获取responseObject对象 responseObject为 [ExpModel]的数组对象类型

netApi.success = ^(id _Nullable responseObject) {

NSLog(@"转换数据:%@",responseObject);

};

// 将发生错误的逻辑剥离出来, failure block只会在请求失败调用

netApi.failure = ^(id _Nullable responseObject) {

NSLog(@"错误原因:%@",responseObject);

};

提issue前,请先对照Demo、常见问题自查!Demo 在ResourceX_Example目录 打开ResourceX.xcodeproj 选择ResourceX_Example工程

使用此ResourceX需要自行添加 AFNetworking、YYModel

配置相关放在 AppDelegate+NetworkConfiguration.m具体可查看 demo

Example 例子

上手指南

注:使用sdk时需要先进行配置服务器返回的数据相关key 返回成功状态值,HUD是否需要加密等。配置相关放在 AppDelegate+NetworkConfiguration.m具体可查看 demo

发起请求 返回Model对象

// 1. 配置接口url decoder解码对象:ExpModel对象

ResourceX *netApi = [ResourceX jsonUrl:@"exmple/loginModel" decoder:ExpModel.class];

// 2. 发送请求方式GET POST

[netApi GET_AF:nil];

// 3. 这里可以返回的是ExpModel对象

netApi.success = ^(id _Nullable responseObject) {

NSLog(@"转换数据:%@",responseObject);

};

可选HUD配置

//配置获取网络失败 提示HUD 可自定义实现 HUD

[ResourceConfig configer_showErrorHit:^(id _Nonnull msg, NSInteger tag) {

[MBProgressHUD showAutoHudInWindow:msg];

}];

//配置获取网络成功 提示HUD

[ResourceConfig configer_showSuccessHit:^(id _Nonnull msg, NSInteger tag) {

if (tag == 1) {

[MBProgressHUD showAutoHudInWindow:msg];

}

}];

//设置 请求开始 加载HUD

[ResourceConfig configer_showHUD_Begin:^{

[MBProgressHUD showHUD_animated:YES];

}];

//设置请求结束 隐藏HUD

[ResourceConfig configer_hideHUD_Finish:^{

[MBProgressHUD hideHUD_animated:YES];

}];

请求加密RSA DES 加解密

//1. 如果项目需要请求参数需要加密 实现此方法 加密服务器参数

[ResourceConfig configer_RequestEncrypt:^NSDictionary *(NSString *url, NSDictionary *parameters) {

/// 将parameters转为utf8 data 或者 jsonstring

NSData *data = parameters.json_Data_utf8;

/// 将utf8 data 进行DES 加密z 转换为 base64字符串

NSDictionary *en_data = @{@"en_data":data.EN_DES(key,iv).base64_encoded_string};

/// NSLog(@"%@",en_data);

return en_data;

}];

//2. 解密服务器数据

[ResourceConfig configer_ResponseDecode:^id _Nullable(NSDictionary *response) {

NSLog(@"==解密服务器json数据===");

//1. 先获取服务器解密的数据文本

NSString *de_data = response[@"en_data"];

if (de_data) {

NSString *de_str = de_data.DE_AES(key, iv);

return de_str.JSON_Object;//将解密的json对象返回给RX

}

return response;

}];

Installation 安装

CocoaPods

pod 'ResourceX'

pod 'ResourceX', '1.2.7'

Carthage

github "JadenTeng/ResourceX"

手动安装

将ResourceX文件夹拽入项目中,导入头文件:#import "Resource.h"

二. RSA DES 加解密

如果项目需要服务起请求RSA DES等加密获取数据或者项目需要用到常规加密的一些方法

不防试试我的另一个ResourceCryptor轻量级加解密framework 传送门:ResourceCryptor

CocoaPods: pod 'ResourceCryptor'

Carthage: github "JadenTeng/ResourceCryptor"

三. 简单实现OC版 map filter forEach (仅提供思路)

提供工具类NSArray+Filters.m文件

在学习Swift中,函数式编程中集合类都有一个重要的思想:通过closure来参数化对序列的操作行为 如:map filter forEach reduce

当你要对Array做一些处理的时候,像C语言中类似的循环和下标,都不是理想的选择 Swift有一套自己的“现代化”手段:通过closure来参数化对数组的操作行为

从循环到map

一个OC中常用的遍历方法

/// 将一个数组中的数字 转换为一个 NSString 的数组

// 1 创建一个数组

NSMutableArray *strsList = [NSMutableArray array];

NSArray *list = @[@1,@2,@3,@4];

// 2 遍历需要转换的数组

for (NSNumber *num in list) {

//3 添加到转换NSString的数组

[strsList addObject:[NSString stringWithFormat:@"%@",num]];

}

虽然这个遍历不难理解,但是,想象一下这段代码在几十行代码中间的时候,或者当这样类似的逻辑反复出现的时候,整体代码的可读性就不那么强了。

使用map

NSMutableArray *strsList_map = [@[@1,@2,@3,@4] map:^id (id num) {

return [NSString stringWithFormat:@"%@",num];}];

上面这行代码,和之前那段for循环执行的结果是相同的。显然,它比for循环更具表现力,并且也能把我们期望的结果定义成对象。当然,map并不是什么魔法,无非就是把for循环执行的逻辑,封装在了函数里,这样我们就可以把函数的返回值赋值给常量了

Release Notes 最近更新

1.2.7 carthage错误

1.2.4 优化数据返回格式错误,demo添加请求错误

1.2.2 添加服务加密解密方式 demo

1.2.1 新增上传图片根据压缩kb上传 Demo优化

1.2

...

ios开发循环网络请求_GitHub - JadenTeng/ResourceX: iOS网络请求,网络泛型编程,工具类的封装,基于AFNetworking 实现, NSCache数据缓存...相关推荐

  1. C# 网络爬虫+HtmlAgilityPack+Xpath+爬虫工具类的封装的使用

    目录 1 工具准备 2 思路准备 3 附加知识准备--XPath 简述 看看例子 用XPath来寻找标签 获取所有同名的标签 获取指定标签 一个实例 最后的补充 4 代码实现 5 爬虫工具类的封装 6 ...

  2. ios开发循环网络请求_iOS开发--HTTP的网络请求状态代码详解

    网络请求是iOS项目的一个大部分,而且大部分的iOS的项目的网络请求是根据AFN进行的二次封装,我们查看返回的结果或者error的网络错误code,从而确认错误类型,针对行的进行调试修改. 说明:一下 ...

  3. ios开发循环网络请求_谈谈 iOS 网络层设计(SSJNetWork封装缓冲,log日志,自动取消网络请求)...

    2.delegate效率高,delegate只是保存了一个对象指针3.在多个通信事件的时候,delegate显得直观也易维护. delegate缺点:1.因方法的声明和实现分离开来,代码的连贯性不是很 ...

  4. ios开发循环网络请求_如何简化网络请求接口开发

    日常开发中,需要大量和后端对接接口,很容易写出大量的模板代码,比如把对接口的请求放到组件内,或者虽然有数据访问层,但是有大量 get,post 方法的调用,传参的字符串拼接,异常处理等等,有些逻辑是可 ...

  5. [IOS开发教程] ios开发培训:浅析最方便的iOS开发环境

    RIA视频教程">摘要:移动 开发也称作手机开发,现阶段比较主流的移动开发平台主要是IOS, 安卓, WP8 等,那么我们今天的ios开发学习就针对ios开发环境来简单阐述一些观点. ...

  6. ios开发系统自带推送(ios自学笔记)

    关于ios系统子弟的推送.放在这里和大家分享 APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 Provider就是我们自己程序的后台服务器,APNS是Apple Pus ...

  7. ios 开发账号 退出协作_如何在iOS 10中的Notes上进行协作

    ios 开发账号 退出协作 iOS' Notes app provides a convenient way to remember the great ideas you come up with ...

  8. 基于HttpURLConnection 网络请求工具类的封装

    HttpUtils: /*** Created by xiaoyehai on 2018/5/21 0021.*/public class HttpUtils {//线程池private static ...

  9. ios开发text kit_第9章 iOS 7中文字排版和渲染引擎——Text Kit

    第 9 章 iOS 7中文字排版和渲染引擎--Text Kit 在iOS 7之前,应用中字体的大小用户是不能设置的,而且开发人员要想实现多种样式的文字排版是件非常麻烦的事情.在iOS 7之后,这些问题 ...

最新文章

  1. Jquery php 点击td变成input,修改后失去焦点发送数据
  2. golang多核的使用
  3. 阿里云服务器问题攻略
  4. 利用mysql做信息管理_利用MySql实现学生信息管理系统的后台数据管理
  5. mysql的基准测试_mysql基准测试 -benchmarks
  6. Maven搭建springMvc+myBatis完整项目
  7. 查看mysql创建 数据库_Mysql创建数据库和查看数据库
  8. 使用web进行数据库管理
  9. uniapp开发微信小程序--实现电子签名功能
  10. 为什么使用Python保存的视频特别大!!(数据速率/总比特率)
  11. 23西南大学电子信息907专硕考研经验贴
  12. 从零开始vue项目使用cesium开发三维地图(一)
  13. python实现向qq邮箱发送邮件
  14. oracle繁体字筛选,Oracle数据库字符集浅析
  15. 如何在 XMind 中输入数学方程?LaTeX 简易入门
  16. 操作系统实验四:C++实现独占设备的分配与回收算法模拟
  17. matlab画根轨迹的渐近线,根轨迹的渐近线.ppt
  18. 阴阳师服务器紧急维护,2月24日阴阳师服务器更新维护内容公告
  19. Lucene5搜索效果问题探究
  20. Ubuntu18.04安装Carla 记录

热门文章

  1. mysql查询各科成绩前三名的记录,sql查询各科成绩前三名----详述过程,思路清晰不烧脑...
  2. OpenPAI调研手册
  3. 【初识Java】Java与C语言对比学习
  4. 什么是中文分词以及中文分词的应用简介
  5. 使用videojs实现视频播放
  6. CentOS 7 修改网卡名称无法生效问题
  7. java读取excel文件单元格英文出现乱码问题的解决方法
  8. 学业水平考试网登录_高中学业水平考试报名系统入口
  9. 如何拥有(建)一个自己的网站-服务器建站
  10. 输入一个字符串,统计其中有多少个单词