那么当用户看下一篇的时候,是不是就很快了呢。
当然这种preload的方案也不能滥用,如果预加载数据的命中率较低的话,也不行,白白浪费了很多的流量。
4、考虑移动端的网络情况和耗电量 如果让我们说出哪类app比较好,可能还不大好说,但是如果让我们说出哪些app很差, 我们肯定会说出那些 体积很大、占用内存多、界面很卡、费电的app不好。 对于移动APP开发者来说, 网络流量和电池电量是不得不考虑的问题。 不过,您也许会说,这些跟接口没啥关系吧,服务器端的接口还能管得了客户端的网络流量和电量? 对于网络情况,接口应该具备为不同的网络提供不同的内容的能力, 通常,移动端的上网方式无非是2G(GSM、GPRS、EDGE)、3G(CDMA、TDSCDMA、WCDMA)、WIFI, 设想一下,如果用户在流量需要花钱的情况下,你的app给用户展示了视频、音频、大量的图片而没有通知用户的情况下, 用户会怎么想,毕竟国内的流量费用还是很贵的。 还以上面的新闻列表接口为例,如果我们能够知道用户的网络情况,只有在wifi的情况下才给用户传输封面图、缩略图之类的, 是不是可以帮用户节省很多流量呢。 newslist?page=1&pagesize=20&content=1&network=wifi 对于电量,首先我们要弄清楚,app的哪些方面会消耗电量? 比如app有大量的计算、有很炫的视觉画面都会消耗电量, 另外,不断的移动网络链接也会消耗大量的电量, 我们都知道移动网络是通过无线电波来通讯的,那么发射装置就需要消耗一定的电量来发射和接收无线信号。 特别的是,频繁的链接会不断的切换网络设备与移动基站之间连接状态,这都会消耗一部分电量。 所以,对于接口而言,尽量用少的链接传输多的数据, 比如,对于关于我们、版本更新以及一些系统配置信息,完全可以通过一次链接全部返回给客户端。 5、通用的数据交换格式 目前,对于接口和客户端的数据交换格式,基本上就是两种,xml和json,而现在使用json的应该占大多数。 交换的数据包括两种,一种是客户端请求服务器端接口时传递的一些参数,一种是服务器端返回给客户端的数据。 对于客户端的请求参数,现在也越来越多的接口要求采用json的格式,而不是以往最常见的key_value对了。 比如,接口需要username和password两个参数 key_value pair的方式是: username=hutuseng&password=hutusengpwd 然后通过GET或者POST方式传送。 而通过json方式交换数据的话,格式如下,直接POST到服务器端。 { 'username':'hutuseng', 'password':'hutusengpwd' } 对于服务器端返回的json数据格式,需要注意两个问题: 一是汉字编码问题,因为json(javascript)内部支持Unicode编码,会将汉字等转换成unicode编码保存, 所以在返回结果中,对于中文,可以直接输出中文,也可以输出中文的unicode编码, json解析器都会很好的解析。 比如下面两种方式都是可以的。 {"code":"208","data":"\u53c2\u6570\u4e0d\u5b8c\u6574"} { "code": "208", "data": "参数不完整" } 二是字段的数据类型,特别是数字类型的,json中尽量转成数字格式, 比如 { 'userid':128 } 不要写成 { 'userid':'128' } 6、接口统计功能 在做PC端网站的时候,我们都会给我们的网站加上个统计功能,要么自己写统计系统,要么使用第三方的比如GA、百度等。 移动端接口API则需要我们自己实现统计功能, 这时就需要我们尽可能多的收集客户端的信息,除了传统的IP、User-Agent之外,还应该收集一些移动相关的信息, 比如 手机操作系统,是android还是ios,都是什么版本, 用户使用的网络状况,是2G、3G、4G还是WIFI 客户端APP是什么版本信息。 这样,有助于我们更好的了解我们用户的使用情况。 7、客户端与服务端的肥瘦平衡 在以前C/S、B/S架构时,我们就已多次讨论过这个问题,客户端是瘦点好还是肥点好,当然也没有固定答案,需要自己根据实际情况去做权衡。 但是,在移动开发中,由于客户端的修改会很费时费力,特别是IOS应用还要经过Apple审核, 另外,当前IOS开发人员、Android开发人员的人工成本普遍较高,人才紧缺, 基于这两点,能在服务器端实现的功能就不要放在客户端,毕竟服务器端程序的修改要比客户端方便、灵活、快捷的多。 8、隐式用户与显式用户 显式用户和隐式用户,我不知道这两个词用的是否确切。 显式用户指的是,APP程序中有用户系统,一个username、password正确的合法用户,称之为显式的用户, 通常显式用户都需要注册,登录以后能完成一些个人相关的操作。 隐式用户指的是,APP程序本身就没有用户系统,或者一个在没有登录的情况下,使用我们APP的用户。 在这种情况下,可以通过客户端生成的UDID来标识一个用户。 有了用户信息,我们就能够了解不同用户的使用习惯,而不仅仅是全体用户的一个整体的统计信息, 有了这些个体的信息之后,就可以做一些用户分群、个性化推荐之类的事情。 9、安全问题 网络安全已经从桌面互联网转到了移动互联网,从客户端蔓延到了接口API中。传统固若金汤的网站,很可能因为接口的一点疏忽而遭受入侵。现在,在很多白帽子或者黑客的入侵思路中,
先看看移动端接口是否存在漏洞,再看网站是否有漏洞。
客户端APP与接口的通信很容易被得到,只要在中间路由上嗅探一下就行, whireshark、tcpdump这类工具使得这项工作变得简单无比。 所以,接口的安全工作不能马虎,暴力破解啊、SQL Injection啊、伪造请求和数据啊、重复提交啊也要考虑到, 如果数据特别敏感,可以考虑采用SSL/TLS等加密传输,或者客户端、服务器端约定一个加密算法和密钥,对来往传输的数据进行加密、解密 如果不采用RESTful API,可以采用基于WSDL和SOAP的Web Service的安全措施。
10、良好的接口说明文档和测试程序 接口文档有时候是项目初期就定下来的,前后端开发人员按照接口规范开发, 有的是接口开发完成后写的。 接口文档要清晰、明了,包含多少个接口,每个接口的地址、参数、请求方式、数据交换格式、返回值等都要写清楚。 接口测试程序,有条件的话,也可以提供,方便前后端的调试。
11、版本的维护 随着业务的变化,客户端APP和服务器端API都会发生变化,增加新的功能,修改已有的功能, 增加功能还好说, 如果是接口需要修改,那么就面临着同一个接口要同时为不同版本的客户端服务的问题。 因此,服务器端接口也要做好相应的版本维护。
