接口设计
(1)需要确定APP和服务器间用什么格式传输数据,常用的有两种:XML和Json。XML文件中存在大量的描述信息,会大大增加网络传输数据;同样的内容,用Json格式,传输的数据比较少,首选Json格式。
还有一种Protocol Buffers格式,以二进制的方式传输存储数据,网络传输数据量比Json还少,但要使用proto文件作为格式验证,各语言需要整一堆pb runtime以及对应的代码生成,增加复杂度较高,目前使用的不多。
(2)需要设计Json数据的具体格式:
发送请求(无具体参数)
发送请求(有非数组格式的具体参数)
发送请求(有数组格式的具体参数)
操作成功(只返回操作状态,不返回数据)
操作成功(返回操作状态和非数组数据)
操作成功(返回操作状态和数组数据)
操作失败(只返回操作状态和出错提示)
在定义Json中的字段名称时,尽量短小,以减少网络传输数据。
(3)APP端解析Json格式时,最好采用严格模式,只要从服务器传来的Json数据,和约定的不一致,无论是多字段、少字段还是字段名称变了,APP端都应报错,这样有利于早发现问题。
(4)因为服务器端的接口代码可能会发生变化,所以在APP端向服务器端发送请求时,最好把接口的版本号也带上。
如已经上线的旧APP中使用的接口版本是1.0,在上线后接口更新到1.1版本,而且不兼容1.0版本,用户有可能不更新APP,还是使用旧版本APP。
服务器端接收到请求后,发现APP使用的接口版本是1.0,就可以调用旧接口处理APP请求;如果请求中不带版本号,遇到这种状况,就很难处理了。
(5)APP往往需要从服务器获取图片,但服务器的图片往往不完全适合APP需要,就需要先在服务器端按APP的需要处理图片,然后把处理过的图片传给APP; APP在发送获取图片的请求时,把所需图片的宽度和高度发给服务器,如采用GET命令,可以按以下方式:
http://www.hello.com/getimage/2/width/100/hight/100
服务器收到请求,就可按APP要求的尺寸处理图片,并发给APP。
(当然也可以用POST命令实现)
(6)大多数APP和服务器交互时用HTTP协议,也就是短连接:每向服务器发送一个请求都要先建立连接,传输数据,然后再断开连接;即使服务器端有做连接池设计,但连接池中容纳的连接个数有限制。
在设计接口时,在APP端执行的每一个动作,尽量做到只需向服务器发送一次请求;也要减少APP在显示新页面时,发送请求的次数,以减少APP和服务器建立连接和断开连接消耗的时间及资源,提高程序响应速度。
(7)对于向APP返回数组数据的接口应设计支持分页操作,提供参数供APP端设置获取元素的起始位置和获取的个数:
数组中有100个元素,但APP端可能第一次从第1个元素开始只获取10个元素,第二次从第11各元素开始只获取5个元素。
如电商APP中获取商品列表和订单列表等就需要这样设计。
(8)服务器端采用的语言即有Java这样的强类型语言,也有PHP这样的弱类型语言,有些后台同事很喜欢使用字符串类型,导致APP端常会遇到类型出错的问题,本来需要整型数据,结果服务器传的是字符串。
为解决这类问题,在和服务器端定义字段的数据类型时,除了在APP端会涉及到数学的加、减、乘、除或比较大小运算的字段外,其余的字段都定义成字符串类型;或把所有字段都定义成字符串,APP内部把字符串转换成整型或浮点型。