本文章是个人在自我开发了一些APP接口后,以及阅读了一些资料后的体会。
一、功能模块设计
从需求分析中抽离出相应的功能,这部分直接关系到我们的程序员需要实现这个应用的什么功能。例如:注册&登陆。
二、应用架构设计
- 对于整个应用来说,我们的架构是C/S模式。客户端使用Android&IOS,服务端使用一种服务端开发语言来提供相应接口。然后客户端通过HTTP协议来获取或者发送相应的请求。
- 确定客户端与服务端使用何种形式的协议进行交付。通常情况下会使用json。
- 然后确定服务端采用何种架构。例如:底层使用mysql、中间层用户提供各种服务、最上层封装接口,提供客户端使用。以及提供管理后台(并不是所有的移动应用都需要管理后台)
三、通信协议的定义原则
1、通用性,前期设计尽可能把情况考虑全面一点,否则当开发一段时间后,再来修改协议,将会非常麻烦。或者为了将就,会导致协议中的数据解析麻烦、冗余不断增加;
2、简洁性,移动端与服务端是通过网络来传输的,协议越简洁,交付速度就越快。体验就越好;
3、统一编码,为了兼容性问题。一般目前客户端与服务端统一采用UTF-8编码方式。
个人采用的协议格式:
{
"code":"正确或者错误的代码号",
"message":"对应代码号的提示信息",
"data":"返回的数据内容"
}
在返回的数据区data可能会有三种情况:单个对象数据、返回多个对象同一种数据、返回单个对象及多个对个对象数据。
四、数据库设计
这个是必不可少的,无需多言。这里需要声明的是,必要的增加一些冗余字段,会大大减少查询时候的速度。所以在概要设计时,可以适当的考虑。
五、服务端程序架构设计(这里使用php做说明)
- 底层使用何种php框架,何种模板解析引擎
- 整个应用的library层
- 最上层是app mvc层(即API接口)
六、客户端程序架构设计
客户端由于是在Andorid或者IOS核心类库的基础上建立起来的,相当只需要定义上层架构,底层已经由相应的移动系统定义好。
不管是Android还是IOS或者其它移动系统。个人认为在这个架构中应该包括以下几个部分:
会使用到的工具类,如:图片操作(上传,浏览,删除)。文件操作等
Test相关类,主要是进行自测的一些测试代码
UI相关的类,MVC中的View层
Model类,MVC中的Model层
Service类,与服务相关的所有类
Sqlite类,存放SQLite数据库的操作类(并不是所有应用都需要)
七、提高性能
- 压力测试:使用apache ab工具。将其加入到环境变量。打开终端输入ab命令操作。
参数说明:-n 总请求数 -c 并发请求数 -p POST请求文件 -t POST请求头
例:ab –n 100 –c 10 http://api.com/index 通常使用10个并发完成100个请求来粗略估计接口性能。
- 语言角度的优化
a、减少include和require:这个问题可以使用安装APC组件来完成
b、用局部变量代替全局变量。
c、尽量使用静态函数或方法:静态方法会提升执行速度
d、释放哪些不用的变量或者资源:不过分依赖PHP的内存回收机制。程序中不用的变量或者资源及时释放。可以使用unset或者直接设置为null。
e、用单引号代替双引号。
f、尽量少使用@屏蔽错误。它会降低脚本运行速度。
g、正则表达式在PHP中运行效率不高,尽量少使用。
h、对存储的数据尽量压缩。
i、升级到新版PHP版本。 - 结构层次的优化
使用缓存中间件:Memcache和Redis, 主要是加快读取速度,降低数据库查询压力。 - 压缩数据
php中主要使用gzip进行压缩 - 其它优化手段
a、对服务器进行相关配置。迁移到linux服务器。
b、数据库优化,如:尽可能使用确定性查询语句,建立索引,主从数据结构(master/slave),集群等。
c、增大服务器带宽,选择良好的运营商。
- 语言角度的优化