Restful后台系统架构深入分析word精品文档25页.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《Restful后台系统架构深入分析word精品文档25页.doc》由会员分享,可在线阅读,更多相关《Restful后台系统架构深入分析word精品文档25页.doc(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流Restful后台系统架构深入分析【精品文档】第 25 页APP后台系统架构说明书编号:20140804版本:V1.0语言:中文文件状态:草稿保密级别:绝密文件标识:需求规格说明书项目名称:APP_FRAMEWORK当前版本:1.0作 者:罗林审 核:张尹路完成日期:2014年9月变更记录日期版本变更说明作者2014-08-041.0创建罗林填表说明:1. 日期:文档变更的日期。2. 版本:对应文档的版本号。3. 变更说明:简单的变更说明。4. 作者:文档编写与修改者.目录第一章 概述51.1编写目的61.2读者对象61.3参考文献61.4术语与缩写解释
2、6第二章 系统设计62.1API设计72.1.1Restful设计原则72.1.2api的命名72.1.3安全性72.1.4api返回数据72.1.5图片的处理(流媒体)82.1.6返回的提示信息82.1.7在线api文档和测试92.2XMPP服务92.2.1Openfire简介92.2.2XMPP运用范围102.2.3处理多账号同时登陆102.2.4一些常用的openfire插件102.2.5php的xmpp library102.2.6个人开发openfire插件112.2.7常见问题112.3短信、邮件、推送服务112.3.1重点112.3.2短信112.3.3邮件122.3.4短信方面
3、122.4通讯的安全性122.5表情的处理142.6LBS服务142.7项目管理16(1)sprint 计划会议17(2)日常开发17(3)每日例会18(4)测试和修bug18(5)sprint 评审会议19(6)sprint 回顾会议19(7)及时反馈192.8数据库分表192.9动态通知212.10数据增量更新222.11系统架构271. Apns272. Email283. Coreseek284. Redis285. Httpsqs286. Xmpp287. Monitor28第一章 概述1.1 编写目的本说明书用于明确要后台系统该架构的具体需求,规范的描述出APP后台系统架构要实现的
4、各种功能和所要达到的性能,使用户和软件开发者双方对该软件的初始规定有一个共同的理解,并使之成为整个开发工作的基础。1.2 读者对象程序员、项目经理。1.3 参考文献提示:列出本文档的所有参考文献(可以是非正式出版物),格式如下:标识符 作者,文献名称,出版单位(或归属单位),日期1.4 术语与缩写解释缩写、术语解 释第二章 系统设计从2011.11月开始接触Android开发,已经两年多了。接近三年的工作经验却一直徘徊在JavaWeb和Android之间,总是找不到进步的方式。一直独立开发,在接近一年多app相关的系统架构、api设计,先后在两个创业公司中工作,经历过手机网页端,android
5、客户端,iphone客户端,其中的乐与苦,得与失,仰首问天有谁知?我觉得是时候来个总结,把相关的技术和心得记录下来。2.1 API设计 2.1.1 Restful设计原则Restful风格:RESTfu设计原则,它被Roy Felding提出(在他的”基于网络的软件架构“论文中第五章)。而REST的核心原则是将你的API拆分为逻辑上的资源。这些资源通过http被操作(GET ,POST,PUT,DELETE)。但现在看,一般的操作只有两种:GET ,POST。这个设计原则最简单的应用就是根据object而不是页面来设计api。最开始的时候,app的一个页面需要什么数据,api就返回什么数据。结
6、果随着 app的UI不断改版,需要的数据不断变化,不停地修改api,最后当api的改动会影响以前的版本的时候,只能写一个新的api版本,最后弄得api中 有很多_V2,V3这样的标志,恶梦!后来在网站的重构过程中,就根据object来设计api,但根据object来设计,又有一个问题,一个大object可能包含很多小object,是一个api返回全部小object,还是分为多个api返回?根据业务和技术,带宽等仔细考虑吧。2.1.2 api的命名其中一个原则,一看api名字就知道这个api是干啥。在创业团队中,一般就只有一两个人负责后台,当你要负责几十甚至上百个api,你就知道不能“望名知ap
7、i”是个什么样的痛苦。2.1.3 安全性参考【2.3通讯的安全性】。2.1.4 api返回数据app客户端的语言 java 和object-c都是强类型语言,所以怎么处理空值显得特别重要,不合理的设计很容易造成app的闪退。从后台的角度来说,api中返回的数据中,正确值和空值的类型必须一样,举例,用户名的字段是“realname: xxx”,如果用户名为空,则应该返回“realname: 。如果返回值是一个array,空数据则返回一个空array,绝对禁止null值。对于客户端,必须用个全局的函数来处理所有api的返回数据,需要有一个机制:对于某个客户端需要数据,如果api中缺失,客户端自动补
8、上并给予默认值。这个机制在我们的实践中大大减少了app的闪退。同时,在数据库设计的时候,一个合理的设计必须是所有字段都有默认值,不应该允许null值。null在大量的语言和数据库中,会带来无穷的问题。对于这个数据库设计原则,我以前不太明白,现在经历了一年的api设计后,终于懂得。如果客户端是php,还有一个问题,php中数组和字典都是array,但在java 和object-c中是不一样,这个问题一定要注意。2.1.5 图片的处理(流媒体)在不同版本的app中,各种不同尺寸的手机中,同一张图片显示的尺寸可能是不一样,如果每次都需要用返回原图,然后在客户端处理,则极大浪费网络资源。而如果是后台处
9、理好图片才返回,则又是一个挑战,怎么有效保存和裁剪多种图片尺寸呢?例如,一开始头像只需要返回60*60的尺寸,后来在新的版本需要返回70*70, 又出了一个新版本,需要返回80*80, 每次增加一个新的尺寸,怎么在数据库上记录下来。这个问题在一开始做api的时候没考虑,后来不得不用了一个极端的方法,每增加新的图片尺寸,就在数据库中增加一个新的字段,保存并生成新的图片尺寸,结果最后数据库的头像字段有avatar,avatar_60_60,avatar_70_70,avatar_80_80,这种极度恶虐的设计。最后,针对图片,我们才用了这样的策略:a) 客户端本地缓存图片,只有没有合适的图片,才去
10、服务器取。b) 当客户端需要某种尺寸的图片,由客户端告诉服务端图片的尺寸,服务端动态生成并缓存起来。例如,客户端需要图片( 则服务器就生成80*80的尺寸并返回。采用了这样的图片处理机制,数据库中只要有一个字段保存原图就行了,其它尺寸就由客户端告诉服务端动态生成。以后无论什么尺寸的图片,数据库中都不需要记录,数据库只有原图就行了。2.1.6 返回的提示信息最科学的情况,服务端只返回信息代码,具体的文字提示由客户端决定。如果文字信息是由服务端返回,则最起码要区分2种信息:提示用户的信息,提示客户端程序员的信息。这两者的区别: 1. 提示用户的信息是要在让客户知道的,提示客户端程序员的信息不需要让
11、客户知道的。2. 提示用户的信息文字很友好,客户不需要专业基础一看就知道是什么,提示客户端程序员的信息则很专业,例如告诉客户端少传了哪个参数?哪个参数有问题等等。2.1.7 在线api文档和测试我们网站的api在线测试文档,既是一份在线api文档,也是一个在线测试工具,极大方便沟通和测试。每次客户端程序员觉得某个api有什么问题,我们就是这个在线工具上讨论沟通的。客户端程序员最喜欢这个玩意了-。上个图解一下馋(这个图是旧版的api,已经弃用了):负责做这个功能的同事专门写了篇博客详细介绍了这个在线api测试文档,还带有demo:可以参考网址:2.2 XMPP服务在app中有时候是需要添加聊天服
12、务,在这里谈谈曾经开发聊天服务的经验:2.2.1 Openfire简介聊天服务端选的是Openfire,这是一个基于xmpp协议的聊天服务器(XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。Gtalk,网易泡泡,Facebook聊天等都是基于xmpp,具有广泛的包容性)。网页上的
13、聊天,使用的是strophe.js ,有一本书XMPP高级编程:使用JavaScript和jQueryXMPP高级编程:使用JavaScript和jQuery是基于这个strophe.js,里面的例子对于初学xmpp具有极大的参考价值。2.2.2 Xmpp运用范围xmpp除了可以提供聊天服务,还可以充当消息服务器,例如有什么消息需要推送到客户端却不希望使用推送工具,xmpp也是个选择。2.2.3 处理多账号同时登陆有时候同一个账号需要在不同的客户端同时登陆服务端,例如,网页端和ios会出现用同一个账号登陆聊天服务器的情况,为了保证两个客户端都能收到聊天消息,需要做下面两个处理:a.相同的账号需
14、要使用不同的resource,可用时间戳生成,如vimgmail/1359956556,vimgmail/1359956777。b. 在后台 Admin Console Server Manager System Properties中,设置“route.all-resources”为true。2.2.4 一些常用的Openfire插件Subscription: 官方的描述是这样的:Automaticallyaccepts or rejects subsription requests。 一个保存openfire聊天记录的插件,当根据我的使用经验,这个插件是把全部聊天记录保存在一个表中,性能极
15、差,只能勉强应付,法律规定要保存3个月聊天记录这个需求,在实际应用中没啥用。2.2.5 Php的Xmpp Library如果服务器是使用php,那么能使用的xmpp客户端就只有xmpphp,这个libary只提供了最基本的发送消息功能,很多常用的功能都没有提供,我根据开发经验把一些常用的xmpp功能开发出来,并整合到xmpphp中:registerNewUser /注册一个新用户addRosterContact /发送添加好友的请求accept friend request /接受好友请求deleteRosterContact /删除某个好友roomMessage /发送群聊消息createC
16、hatRoom /创建群聊kickUserOutToChatRoom /把某个人剔除群聊项目的地址: 2.2.6 个人开发Openfire插件在手机的聊天应用中,经常出现的一个需求就是把用户的离线消息通过推送系统推送到用户的手机上,为了实现这个功能,本人就开发了本插件,这个openfire 插件是拦截了发给openfire用户的离线消息,然后根据自身的业务逻辑推送到手机上。详细介绍:2.2.7 常见问题openfire中发送某些特殊字符会断开xmpp连接的问题,解决方法请看:另外一个好消息, 和android 应用简单整合就能提供聊天服务,密切关注中。如果真的能实现,那么对于app提供聊天服务
17、是个很好的选择。但有几个问题:1. 它现在还没正式上线。2. 访问外国网站的风险。3. 法律规定要保存3个月聊天记录。2.3 短信、邮件、推送服务在app的后端设计中,免不了消息的推送,短信,邮件等服务,下面就个人的开发经验谈谈这方面。2.3.1 重点最重要的是,各种推送一定要放在队列系统中处理,不然会严重影响api的响应时间。2.3.2 短信以前我们是用亿美软通的短信服务,但在三大运营商收紧了短信服务后,亿美软通的短信延迟非常厉害,后来我们找到了这家短信服务商 ,这家发送短信到联通,电信,移动手机很快就到了(直到2014.01.24)。如果发送到移动的短信还没有改善,最后的后备方案:发送到联
18、通,电信的短信使用国内的服务商,发送到移动的短信就只能使用国外的短信服务商(国外发短信到移动手机3毛一条,好贵啊!)2.3.3 邮件在一开始时使用服务器自身的postfix发送邮件的,但我们发现邮件被很多邮件服务商当成垃圾邮件了,而且没有重发机制,不能保证邮件的准确到达。后来查了一下各大网站,发现知乎和github 都是使用 的邮件服务,看了一下文档,价格很公道,而且每月有1万封的免费邮件额度,非常适合创业型的公司。2.3.4 短信方面在这方面,我考虑的重点是:在创业初期,能用第三方就尽可能多使用第三方的服务,自身只处理业务逻辑本身,快速的开发产品。android篇:android方面,我们使
19、用过3种消息推送机制:1. 极光推送,现在放弃了。我们使用的过程中,发现极光的机制有点古怪,一般来说,一个app在极光服务器中是固定一个id,但在极光中是通过广播来通知app这个id,而且在文档中居然说明这个id会不定期变化。2. openfire服务器。app通过连接openfire服务器来获取各种消息,但是openfire有个机制,当app连接openfire后空闲就自动断开,没法保持连接的的稳定性,而修改这个openfire的机制成本太高了,后来也放弃使用openfire。3. 百度推送。已现在使用一段时间的情况来说,推送及时快速,挺满意百度的推送服务。iphone篇:apns是ipho
20、ne推送的不二选择。但如果自身开发apns的服务,会遇到无效token而需要重发,这样需要维护一个队列并建立重发机制,考虑到项目的时间和研发成本,最后也是使用了百度推送的服务。当用户在iphone上卸载了app后,device token会失效,所以应该定期访问苹果的feedback服务器,把无效的token去掉。2.4 安全性在开发一个项目的时候,大家经常会忽略项目的安全性问题,有很多的安全性问题其实就是一个意识的问题,解决起来并不复杂,但是因为这些疏忽,却可能会给我们的用户带来很大的风险。下面就列举一些在做项目的时候应该考虑的一些安全性问题。2.4.1 通讯的安全性在app的后台设计中,一
21、个很重要的因素是考虑通讯的安全性。因此,我们需要考虑的要点有:1. 在app和后台,都不能保存任何用户密码的明文。2. 在app和后台通讯的过程中,怎么保证用户信息的安全性?在app中,根据安全考虑,用户的操作分为两类:1. 用户登录注册操作。2. 用户的其他操作。在第一点,用户登录注册操作中,是会出现用户密码,所以在这个过程中,必须要使用https通讯,保证通讯的安全。在第二点,用户的其他操作,怎么保证这部分通讯的安全呢?在我的设计中,是采用了公钥加私钥保证安全。用户的id是公钥,通过一定的算法对用户的id进行加密得到一个加密字符串是私钥。当用户登录或注册后,通过https把公钥加私钥返回给
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Restful 后台 系统 架构 深入 分析 word 精品 文档 25
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内