网络层的搭建需要解决哪些问题
2016-12-06 09:34
591 查看
本文主要总结iOS网络层搭建中需要考虑的一些问题,
还是使用离散型调用:
那你会选择使用谁呢?优缺点各是什么呢?
当用户不停的下拉刷新的时候,怎样避免每次下拉去发起一个请求呢?判断当前没有请求的时候再发起请求?还是取消前一次发起的请求呢?用户在买商品的时候不停的再筛选,这个时候又怎么发起请求呢?
一个页面多个请求
一个页面的数据由多个API返回的数据组成,APIs全部请求完成再开始刷新界面,这又如何处理呢?例如sectionHeader是一个API返回数据,tableView是另一个API返回的数据。
请求嵌套
一个API返回的数据是另一个API的参数,例如先获取用户的ID,再用这个ID作为参数去请求用户收藏的文章。
分页请求
tableView分页请求,怎样封装才能让我们只需要调用接口,而不需要每次都关心
我们怎么才能处理好上述的情况呢?一个对象还是什么?
成功和失败的回调是处理之后再返回呢?还是直接返回?怎么和业务层对接?
说个故事:有次需要修改某次请求成功后的逻辑,项目回调采用的是Block,请求是在Controller发起的,但是成功时回调的Block的实现并不在Controller中,将Block传给了一个View,view中继续传给了一个View。我不知道这样的缺点,但是我找起来真的好麻烦好吗?block可能还会延迟Controller的释放,请求发起之后,立马返回。Controller是不会立马释放的。
那么这几种回调你采用的是哪一种呢?或者更倾向于哪一种呢?
例如微博,先展示上次请求的数据,当请求成功时候在替换调旧的数据刷新界面并保存在本地供下次使用。这样用户就不会傻傻的对着一个空白界面盯着菊花了。
只读取本地缓存
对于一些几乎不会变化的数据,请求一次就保存,以后只读取本地数据。比如k12教育类app的年级,几乎是不会变的。
短时间内的缓存
用户的信息不会不停的被修改的,用户不会那么无聊。那么获取用户信息的接口我们就可以设置一个59分钟的缓存。缓存时间内请求只读取本地数据,过期之后才会重新请求。
那么采用什么样的安全机制呢?https?各种加密?
网上有很多例子,基本都解决上述的问题。毕竟带着问题再看如何解决问题,更有效果。
注意这里真的只是列出了要解决哪些问题,并没有提出解决方案。如果有好的解决方法可以分享一下。那么问题来了!
调用方式
是使用集约型调用如下:[ObjectClass postDataWithURL:url params:params class:class success:success failure:failure];所有的请求都集中在一个类中,每个请求都是一个类方法,一般回调采用Block;
还是使用离散型调用:
[instance loadDataWithParams:params success:success failure:failure];每个请求都建立一个对象,使用时实例化对象并调用实例方法,可能
对象会比较多,但是对象多不好吗
洗衣服的一个,暖床的一个。。。yy了回调的话使用delegate和block,通知什么的也有。
那你会选择使用谁呢?优缺点各是什么呢?
发起请求
请求发起的条件当用户不停的下拉刷新的时候,怎样避免每次下拉去发起一个请求呢?判断当前没有请求的时候再发起请求?还是取消前一次发起的请求呢?用户在买商品的时候不停的再筛选,这个时候又怎么发起请求呢?
一个页面多个请求
一个页面的数据由多个API返回的数据组成,APIs全部请求完成再开始刷新界面,这又如何处理呢?例如sectionHeader是一个API返回数据,tableView是另一个API返回的数据。
请求嵌套
一个API返回的数据是另一个API的参数,例如先获取用户的ID,再用这个ID作为参数去请求用户收藏的文章。
分页请求
tableView分页请求,怎样封装才能让我们只需要调用接口,而不需要每次都关心
++pageNumber呢?
我们怎么才能处理好上述的情况呢?一个对象还是什么?
回调方式
回调方式一般有Block,通知,KVO,delegate。这几种方式本身并无好坏,不同场景都有自己的优势。成功和失败的回调是处理之后再返回呢?还是直接返回?怎么和业务层对接?
说个故事:有次需要修改某次请求成功后的逻辑,项目回调采用的是Block,请求是在Controller发起的,但是成功时回调的Block的实现并不在Controller中,将Block传给了一个View,view中继续传给了一个View。我不知道这样的缺点,但是我找起来真的好麻烦好吗?block可能还会延迟Controller的释放,请求发起之后,立马返回。Controller是不会立马释放的。
当然weak可以解决
那么这几种回调你采用的是哪一种呢?或者更倾向于哪一种呢?
缓存
读取本地缓存的同时去请求数据例如微博,先展示上次请求的数据,当请求成功时候在替换调旧的数据刷新界面并保存在本地供下次使用。这样用户就不会傻傻的对着一个空白界面盯着菊花了。
只读取本地缓存
对于一些几乎不会变化的数据,请求一次就保存,以后只读取本地数据。比如k12教育类app的年级,几乎是不会变的。
短时间内的缓存
用户的信息不会不停的被修改的,用户不会那么无聊。那么获取用户信息的接口我们就可以设置一个59分钟的缓存。缓存时间内请求只读取本地数据,过期之后才会重新请求。
安全
某次比较闲,试试能不能抓包修改公司一个购买课程的app的课程价格,然而就这样成功了!两千被改成一毛。后来后台加了一个验证。就是将返回的数据,加密加密在加密,然后移动端作比对。如果比对不成功,那么就是数据在传输过程中被修改了。那么采用什么样的安全机制呢?https?各种加密?
网上有很多例子,基本都解决上述的问题。毕竟带着问题再看如何解决问题,更有效果。
相关文章推荐
- 因为项目的需要,近日调研了一下在 Windows Phone 手机上播放H264裸码流的方法,期间参考了大量的网络资源,最终得以解决这个问题,对如此具有钻研和奉献精神的他们表示诚挚的感谢!
- ,如果golang想成为主流语言,还需要解决哪些重要的问题
- 虚拟机快速搭建CentOS,并解决网络问题
- protobuf windows java 环境搭建(编译出protobuf需要的jar包,解决编译时OutOfMemory的问题)
- 解决分布式系统的一致性问题,我们需要了解哪些理论?
- 如何比较Keras, TensorLayer, TFLearn ?——如果只是想玩玩深度学习,想快速上手 -- Keras 如果工作中需要解决内部问题,想快速见效果 -- TFLearn 或者 Tensorlayer 如果正式发布的产品和业务,自己设计网络模型,需要持续开发和维护 -- Tensorlayer
- 在Win下搭建CentOS 6网络安装源时/repodata目录下文件名后缀丢失问题及解决方法
- 消息中间件需要解决哪些问题
- 想做一个可以赚钱的网站需要解决哪些问题
- 解决软件服务定制化的问题,众包模式还需要接受哪些考验?
- APP开发前哪些问题需要解决?
- 为XP远程增加网络身份验证,解决“远程计算机需要网络级别身份认证 您的计算机不支持该验证”问题
- Adobe发布网络开发工具Shadow 解决跨平台问题需要启用javascri
- 让读者快速了解RocketMQ消息中间件需要解决哪些问题
- 微信公众号本地环境搭建(解决微信接口需要公网地址,但是只有本地环境的问题)
- 电路板焊接完成发现CPU没有工作,需要从哪些方面考虑解决这个问题?
- [转]在创业公司做架构师,你需要解决哪些问题?
- 网络数据加密需要解决三个问题:
- 搭建CentOS 6网络安装源时/repodata目录下文件名后缀丢失问题及解决方法