本文总结了iOS客户端与服务器进行交互时,采用 RESTful API + Json 的交互方式,针对不 同的数据形式以及不同的解析方法,如有不足之处,欢迎指正。
先了解一下相关的基本概念。
HTTP通信:
即使用HTTP协议进行通信,工作原理是客户端向服务器端发送一条HTTP请求,服务器收到之后先 解析客户端的请求,之后会返回数据给客户端,然后客户端再对这些数据进行解析和处理。HTTP 连接采取的是“请求—响应”方式,即在请求时建立连接通道,当客户端像服务器端发送请求时,服 务器端才能向客户端发送数据。
Socket通信:Socket又称套接字,在程序内部提供了与外界通信的端口,即端口通信。通过建立 socket连接,可为通信双方的数据传输传提供通道。Socket的主要特点有数据丢失率低,使用简 单且易于移植。Socket类似于peer to peer的连接,一方可随时向另一方喊话。
小结:HTTP和Socket都是基于TCP协议的。使用两种通信方式的情况是: 使用HTTP的情况:双方不需要时刻保持连接在线,比如客户端资源的获取、文件上传等。
使用UDP的情况:大部分即时通讯应用(QQ、微信)、聊天室、苹果APNs等。
主要有四种:
数据流
1.从web服务器响应到手机终端的数据 一般打包在一个字节数组中,这个字节数据中包含了不同的 数据类型,客端端采取Java数据流和过虑流的方式从字节数组中取出各种类型的数据。
这种交互方式我在学习iOS之初用过,实际项目中并没有发现哪家公司在用。这种方式了扩展 了iOS平台在访问Web服务器进行交互时的解析数据能力,仅供研究学习。
2.XML Webservice的标准数据格式。 Protocol Buffers
3.Protocol Buffers 是一种轻便高效的结构化数据存储格式,支持跨平台。它很适合做数据存储或 RPC 数据交换格式。比 JSON 最大的优点就是传输的时候数据体积可以压缩很小,传输效率比较 高。本人在这个在项目中没有用到过。
4.JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。毫无疑问,大家最常用。
本文重点会介绍关于Json数据格式 的常用格式。
Json数据格式 的采用,根据业务情况,一般是团队中的共识。技术的迭代更新,到后期基本都会考虑多 个平台的通用性、可移植性和可读性。比如 我们开发团队,有移动端开发(Android、iOS)、前端开发 (H5开发)和后台开发(golang开发)。
关于服务器的开发规范,我们先来了解一下。
服务器开发规范 我们采用的是 RESTful , RESTful 是目前最流流行的 API设计规范,用于web数据接
口的设计。
• 面面向资源(URI),具有解释性
• 行为(GET / POST / PUT / PATCH / DELETE)与资源(URI)分离,更更加轻量量
• 数据描述简单,使用用JSON、XML、Protocol Buffers即可全覆盖,主要使用用JSON
它的核心原则是定义用少量方法就能操作的命名资源。资源和方法可视为API的 和动词。
• GET :读取(Read)
• POST :新建(Create)
• PUT :更新(Update),通常是全部更更新
• PATCH :更新(Update),通常是部分更更新
• DELETE :删除(Delete)
项目搭建之始,客户端和服务器一般用 Get 和Post的方式来交互,随着业务的演进和技术的规范迭代, 到后期我们都得按规范来。于是 我们采用了上述几种方式来设计服务器接口,相应地,移动端的请求方 式也得与之对应。
至此,不在赘述 RESTful API 的设计规范,可自行百度了解更多。
接口的数据一般都采用JSON格式进行传输,不过,需要注意的是,JSON的值只有六种数据类型:
•Number:整数或浮点数
•String:字符串
•Boolean:true 或 false
•Array:数组包含在方括号 [] 中
•Object:对象包含在大括号 {} 中
•Null:空类型
传输的数据类型不能超过这六种数据类型,不能用Date数据类型,不同的解析库解析方式不同,可能会 导致异常,如果遇到日期的数据,最好的方式就是使用毫秒数表示日期。
本文总结了iOS与服务器的交互方式和数据类型,并总结了在实际项目的简单运用。数据格式的运
用场景远不止上面提到的几种场景,后期会持续完善,如有不足之处,欢迎指出。
打开背包向服务器申请数据服务器下发被背包内的物品 ID 、Count(结构体形式以List发送到客户端)
客户端根据接受的ID、Count去本地配置表中配置物品然后显示在背包中
(从服务器接受后在本地查找ID对应的图片 属性 类型后加入Count显示在背包中)
点击物品,将物品ID发送到服务器,服务器扣除物品数量,并将使用物品后所需的效果(如 增加经验、属性等),增加完毕之后将数值返回给客户端,客户端更新背包内容并将对应属性同步刷新显示(如果物品用完 将物品从储存的List中将物品进行删除操作)
服务器向背包发送ID、Count,在本地配置表中生成后 刷新显示到背包中。
客户端发送 角色ID 到客户端,客户端在库中搜索角色
(1).玩家2同意添加好友,玩家2客户端向服务器发送消息,服务器将两 人绑定为好友关系,将数据(玩家ID等)下发到双方客户端,并刷新 显示双方客户端好友列表。
(2).玩家2拒绝添加好友,玩家2客户端向服务器发送消息,服务器向玩 家1发送消息,玩家1客户端显示被拒绝消息提醒。
玩家1向服务器发送消息,服务器取消双方好友关系的绑定,并将数据发回双方客户 端,客户端更新显示好友框。
通常以动态生成和隐藏方式显示,只显示上下5个范围内容。。。。。
客户端向服务器发送消息,服务器判断当前时间,并判断当天是否签到过,如未签到 过,向客户端发送信息,客户端显示签到成功,并修改签到按钮为已经签到,如需领 取签到奖励,参考背包获得物品。
服务器记录账号签到天数,如需要补签将补签日期ID发送到服务器,服务器判定当 天是否签到,未签到则执行签到操作,获取奖励物品。
服务器向客户端发送消息(邮件名、邮件内容、是否有附件、附件ID、Count),客 户端接受信息后显示有新邮件的提示,在本地配置表中填入接受的消息,并显示在邮 件中。客户端点击领取附件(向服务器发送消息,已经领取),并且做背包操作,参 考背包系统获取物品。
玩家1编辑邮件,点击发送按钮,将邮件(名称、内容、是否有附件、附件、收件 人)发送到服务器,服务器在库中索搜收件人,然后参考系统附件邮件操作。
C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。Server是服务器瑞,client是客户端。客户端是面向用户的,用户通过客户端提交各种请求(软件功能范围内的)。
服务器端处理客户请求并作出回应。Client就是中文中的客户,用户,使
用者,而Server就是和client相对应的东西,Client和Server之间的关系是一种服务的提供方,和服务
的使用方之间的关系,这种关系是生活中普遍存在的关系.例如,我们去银行取钱,我们就是银行的Cli
ent,而银行作为一个整体是我们的Server.为我们提供服务的是银行的一套系统,而不仅仅是某一个
具体的工作人员.这种关系,就是Client和Server之间的关系.Client/Server就是利用这种关系作为
基础而构成的系统.
在客户机/服务器网络中,服务器是网络的核心,而客户机是网络的基础,客户机依靠服务器获得所需要的网络资源,而服务器为客户机提供网络必须的资源。
它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到
Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server
应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)