网络
移动网络应用=良好的UI+良好的用户体验+实时更新的数据
基本概念
客户端(Client):移动应用(iOS,Android等)
服务器(Server):为客户端提供服务、提供数据、提供资源的机器。
请求(Request):客户端向服务器索取数据的一种行为
响应(Response):服务器对客户端的请求做出的反应,一般指返回数据给客户端
服务器:按软件开发阶段可分为两种:
远程服务器[外网服务器、正式服务器]:是应用上线后使用的服务器,供全体用户使用,速度取决于服务器的性能、用户的网速
本地服务器[内网服务器、测试服务器]:应用处于开发、测试阶段使用的服务器,仅供公司内部的开发人员、测试人员使用;速度由于是局域网,故速度快,有助于提高开发测试效率。
URL[统一资源定位符]:
客户端如何找到想要链接的服务器:使用URL
通过1个URL,就能找到互联网上唯一的1个资源
URL就是资源的地址、位置,互联网上的每个资源都有一个唯一的URL
URL的基本格式=协议://主机地址//路径
协议:不同的协议代表着不同的资源查找方式、资源传输方式
主机地址:存放资源的主机[服务器]的IP地址[域名]
路径:资源在主机中的具体位置
URL中常见协议
HTTP:超文本传输协议,访问的是远程的网络资源:http://
http协议是在网络开发中最常用的协议
file:访问的是本地计算机上的资源,file://(不用加主机地址)
mailto:访问的是电子邮件,mailto:
FTP:访问的是共享主机的文件资源,格式是ftp://
HTTP[Hypertext Transfer Protoclol]简介
访问远程网络资源最常用的协议。
HTTP作用:规定客户端和服务器之间的数据传输格式;让客户端和服务器能有效地进行数据沟通。
HTTP特点:协议简单、程序规模小、通信速度快
允许传输各种各样的数据
HTTP0.9和1.0使用非持续连接:现在每次连接只处理一个请求,服务器对客户端的请求做出响应后,马上断开连接,这种方式可以节省传输时间。
发送HTTP请求的方法
在HTTP/1.1协议中,定义了8种发送http请求的方法
GET、POST、 OPTIONS、 HEAD、 PUT、 DELETE、 TRACE、 CONNECT、 PATCH
根据HTTP协议的设计初衷,不同的方法对资源有不同的操作方式
PUT:增
DELETE:删
GET:查
POST:改
最常使用的是GET和POST(实际上GET和POST也能实现增、删、改、查)
使用GET和POST请求跟服务器进行交互,要了解的概念
参数:就是传递给服务器的具体数据,比如登录时的账号、密码
GET和POST的对比:区别主要表现在数据传递上
GET:在请求URL后面以?的形式更上发给服务器的参数,多个参数之间用&隔开;由于浏览器和服务器对URL长度有限制,因此在URL后面附带的参数是有限制的,通常不能超过1KB
POST:发送给服务器的参数全部放在请求体中;理论上POST请求传递的数据量是没有限制的(具体的还要看服务器的处理能力)
选择GET和POST的建议
如果需要大量数据,比如文件上传,只能用POST请求;
GET的安全性比POST要差些,如果包含机密\敏感信息,建议用POST
如果仅仅是索要数据,建议使用GET
如果是增加、修改、删除数据,建议使用POST
IOS中发送HTTP请求的方案
苹果原生(自带)
NSURLConnection:用法简单,最古老最经典最直接的一种方案【坑较多】
NSURLSession:功能比NSURLConnection更加强大,苹果目前比较推荐使用这种技术【2013推出,IOS7开始出的技术】
CFNetWork:NSURL*的底层,纯C语言。
第三方框架
ASIHttpRequest:外号“HTTP终结者”,功能极其强大,可惜早已停止更新
AFNetworking:简单易用,提供了基本够用的常用功能,维护和使用者多
HTTP通信过程-请求
HTTP协议规定:1个完整的由客户端发给服务器的HTTP请求中包含以下内容
请求头:包含了对客户端的环境描述、客户端请求信息等。
请求体:客户端发给服务器的具体数据,比如文件数据(POST请求才会有)
HTTP通信过程-响应
响应头:包含了对服务器的描述、对返回数据的描述
响应体:服务器返回给客户端的具体数据,比如文件数据
常见响应状态码
200 OK
400 客户端请求的语法错误,服务器无法解析
404 服务器无法根据客户端的请求找到资源
500 服务器内部错误,无法完成请求
NSURLConnection:
NSURL:请求地址
NSURLRequest:一个NSURLRequest对象就代表一个请求,它包含的信息有:
1个URL对象;请求方法、请求头、请求体、
NSMutableURLRequest :NSURLRequest的子类
NSURLConnection:负责发送请求,建立客户端和服务器的连接;发送数据给服务器,并收集来自服务器的响应数据。
使用NSURLConnection发送请求步骤
创建一个NSURL 对象,设置请求路径
传人NSURL创建一个NSURLRequest对象,设置请求头和请求体
使用NSURLConnection发送请求[使用代理方式]
NSURLSession
使用步骤:
使用NSURLSession对象创建Task,然后执行Task
Task的类型:NSURLSessionTask 、NSURLSessionDataTask 、NSURLSessionDownloadTask、 NSURLSessionUploadTask
JSON解析:
JSON是轻量级的数据格式,一般用于数据交互
服务器返回给客户端的数据,一般都是JSON格式或者是XML格式;JSON的体积小于XML
标准JSON格式的注意点:key必须用双引号
在IOS中,JSON的常见解析方案有4中
第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差)
苹果原生自带:NSJSONSerialization(性能最好)
//解析JSON JOSN—OC对象
[NSJSONSerialization JSONObjectWithData:(nonnull NSData *) options:(NSJSONReadingOptions) error:(NSError * _Nullable __autoreleasing * _Nullable)];
/*options的选项
NSJSONReadingMutableContainers = (1UL << 0),创建出来的字典和数字就是可变
NSJSONReadingMutableLeaves = (1UL << 1):数组或者字典里面的字符串也是可变的
NSJSONReadingAllowFragments = (1UL << 2) :允许解析出来的不是数组或字典,比如字符串和NSNumber
*/
//对象OC-JSON
[NSJSONSerialization dataWithJSONObject:(nonnull id) options:(NSJSONWritingOptions) error:(NSError * _Nullable __autoreleasing * _Nullable)];
格式化服务器返回的JSON数据
在线格式化:http://tool.oschina.net/codeformat/json
将服务器返回的字典或数字写成plist文件
视频播放
利用苹果官方的API简单播放视频
MPMoviePlayerController*vc = [MPMoviePlayerController alloc]initWithContentURL:(NSURL *)];
[selfpresentViewController:vcanimated:YEScompletion:nil];
JOSN解析字典转模型框架
Mantle:所有模型都必须继承自MTModel;
JSONModel:所有模型都必须继承自JSONModel;
MJExtension:不需要强制继承任何其他类;
设计框架需要考虑的问题
侵入性:一个框架侵入性大就意味着很难离开这个框架
易用性:比如少量代码实现N多功能
扩展性:意味着很容易给这个框架增加新的功能
XML
XML解析:有两种方式
DOM方式:一次性将整个XML文档加载进内存,适合小文档
SAX:从根元素开始,按顺序一个一个往下解析,比较适合解析大文件
在iOS中的XML解析
苹果原生:
NSXMLParser:SAX方式解析,使用简单
NSXMLParser*parser = [[NSXMLParseralloc]initWithData:data];
/*开始解析*/
[parserparse];
parser.delegate=self;
第三方框架:libxml2:纯C语言,默认包含在IOS SDK中,同时支持DOM和SAX方式解析;GDataXML[不支持cocoapods]:DOM方式解析,由google开发,基于libxml2
网友评论