app 后端技术
app 后端技术
一直以来工作的方向是web server,对app server没有什么了解。虽然没有接触过移动app开发,但对app后端技术还是挺有探索欲望的,app应用和web应用在前端的用户习惯不同,相信后端也会有很多不太一样的地方。开此文记录一些网上收集到的app后端技术体系,以备了解。
下面就app server在业务设计上通常需要考虑的几个方面:
1、api风格
如何设计一套合理且优雅的api接口集,可以参考Restful分格:
- api采用http(s)协议与前端通信;
- 每个uri代表一种资源(resource),对于资源的操作类型,由HTTP方法表示(如GET、POST、PUT等)。例如:
GET /zoos: 列出所有动物园
POST /zoos: 新建一个动物园
GET /zoos/ID: 获取某个指定动物园的信息
PUT /zoos/ID: 更新某个指定动物园的信息(提供该动物园的全部信息)
DELETE /zoos/ID: 删除某个动物园
GET /zoos/ID/animals: 列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID: 删除某个指定动物园的指定动物
- 通过参数过滤结果,例如
?limit=10: 指定返回记录的数量
?offset=10: 指定返回记录的开始位置。
?sortby=name&order=asc: 指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1: 指定筛选条件
- 服务器返回的数据格式尽量采用json;
- API身份认证key采用OAuth 2.0框架;
- 返回错误码和错误消息,方便前端进行错误处理和异常保护;
2、聊天服务
聊天服务端选用openfile,这是一个基于xmpp协议的聊天服务器。
xmpp除了提供聊天服务外,还可以充当消息服务器。
3、短信、邮件、推送服务
首先,各种消息推送一定要放在队列中处理,不然会严重影响api的响应时间。
手机短信方面:
通常要使用一些第三方短信服务平台提供的接口,这个没什么好说的;
email方面:
要考虑邮件发送失败的重发问题,所以不再在服务器上搭建sendmail服务发送,选择了邮件服务商mailgun。mailgun还提供每个账号每月1万封邮件的免费额度,很适合创业团队。
消息推送方面:
1、apns是iphone推送的不二选择。但如果自身开发apns的服务,会遇到无效token而需要重发,这样需要维护一个队列并建立重发机制。
当用户在iphone上卸载了app后,device token会失效,所以应该定期访问苹果的feedback服务器,把无效的token去掉。
2、android方面,有google的C2DM平台,但C2DM服务器在国外,国内用起来好像不太可用;
4、LBS
在LBS的应用中,一个基本的需求是查找附近的用户(或商户),现在有两种做法:
1. 使用mysql的空间数据库,具体做法参考:http://blog.sina.com.cn/s/blog_a48af8c001018q1p.html 。
2. 使用geohash编码。
关于geohash编码,它把球面上的经纬度转换成一个值,简单点来说就是把二维坐标转换成一维坐标。查找附近的时候,非常方便,用SQL中,LIKE ‘w23yr3%’可查询附近的所有地点。
当检索数据量特别大的时候,采用 coreseek+redis+mysql 可以解决查询慢的问题;
PS:coreseek是一个基于Sphinx的全文检索引擎。
5、动态通知
通常很多app的右上角能看到一个小红圈,圈里面有一个数字,表示有多少条新消息到达,借此唤醒用户的打开欲望。
在app端,怎么才能知道有多少条新通知呢?实现的技术有两种:
1. polling:app定时查询
2. push:服务器实时推送给app
相对来说,push的方式更高效,避免app频繁去查询服务器,既增加了服务器的压力,又多消耗了自己的流量和电量。
6、数据增量更新
7、安全性
用户和后端服务器通信的数据不要采用明文传输,尤其是涉及用户的帐号、密码这些敏感信息。
比如用户登录过程可以使用ssl 协议交换数据。
之前我自己在港交所的行情接收项目中采用过 Diffie-Hellman 算法,就是一种不错的密钥交换算法:

参考文档:
1、曾健生, 《app后端》 http://blog.csdn.net/newjueqi/article/category/1743543
2、阮一峰,《RESTful API设计指南》 http://www.ruanyifeng.com/blog/2014/05/restful_api.html
3、《查找附近的xxx 球面距离以及Geohash方案探讨》 http://www.wubiao.info/372
4、《XMPP协议实现原理介绍》 http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378956.html
app 后端技术的更多相关文章
- app后端设计(12)--图片的处理
app上线后,不断接受用户的反馈,于是,反馈非常差的情况下,都会有app的改版. 一旦app的改版,都会有比较大的UI改动,一改动UI,那么图片的尺寸也就必须要改变. 在app后端设计(1)—api( ...
- app后端设计(11)-- 系统架构(2014.12.05更新)
个人认为,在小型的创业团队中,特别是以应用产品为主,在架构后台的时候,需要集中精力解决自身业务上的问题,不是花时间解决第三方已经解决的问题,简单点来说,就是能用第三方服务就使用第三方的服务.基于这个原 ...
- 1.用互联网的产品思维打造一本app后端的书
刚刚接触app后端,是做完adidas中国的官方商城的时候,那时不清楚app后端应该怎么架构,只能摸着石头过河,网络上只有一些零散的资料,遇到问题,只能不断地搜索,思考,务必找到解决问题的方法. 在从 ...
- app后端设计(13)--IM4JAVA+GraphicsMagick实现中文水印
在app的后台中,有时候为了标示版权,需要给图片加上水印. 在liunx中,IM4JAVA+GraphicsMagick是个高效处理图片的方案,图片的裁剪是使用了这个技术方案,为了减少不必要的开发成本 ...
- app后端设计(php)
来源:http://blog.csdn.net/column/details/mobilebackend.html?page=1 做了3年app相关的系统架构,api设计,先后在3个创业公司中工作,经 ...
- app后端设计--总目录 (转)
特此说明,我转载的!!! app后端设计(1)--api app后端设计(2)--xmpp的使用 app后端设计(3)--短信,邮件,推送服务 app后端设计(4)-- 通讯的安全性 app后端设计( ...
- app后端设计--总目录
做了3年app相关的系统架构,api设计,先后在3个创业公司中工作,经历过手机网页端,android客户端,iphone客户端,现就职于app云后端平台bmob(想了解bmob点击这里).其中的乐与苦 ...
- app后端设计(0)--总文件夹
原文:http://blog.csdn.net/newjueqi/article/details/19003775 做了接近两年app相关的系统架构,api设计,先后在两个创业公司中工作,经历过手机网 ...
- 黄文俊:Serverless小程序后端技术分享
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 黄文俊,现任腾讯云SCF无服务器云函数高级产品经理,多年企业级系统开发和架构工作经验,对企业级存储.容器平台.微服务架构.无服务器计算等领域 ...
随机推荐
- 修改Tomcat可支持get形式url长度
maxHttpHeaderSize="8192" 加在 <Connector port="8081" maxHttpHeaderSize="31 ...
- Got a packet bigger than 'max_allowed_packet' bytes
昨天用导入数据的时候发现有的地方有这个错误.后来才发现我用RPM包装的MYSQL配置文件里面有old_passwords=1去掉就可以了. Got a packet bigger than ‘max_ ...
- Log4Net写入到数据库配置过程中的一些小问题备忘
问题1: 在公司进行log4net写入服务器配置的时候,一切正常,但是在家里的机器上,就频繁出现这个问题: SQL Server 2008 报错:已成功与服务器建立连接,但是在登录前的握手期间发生错误 ...
- Java系列: 关于LinkedList的 ListIterator的add和remove
static void testListIteratorAdd(){ LinkedList<String> strList = new LinkedList<String>() ...
- Activiti系列:如何让Activiti-Explorer使用sql server数据库
从官网下载的Activiti-explorer的war文件内部默认是使用h2内存数据库的,如果想改用其他的数据库来做持久化,比如sql server,需要做如下配置. 1)修改db.propertie ...
- 从0开始学Java——JSP&Servlet——HttpServletRequest相关的几个路径信息
在HttpServletRequest中有几个获取路径的接口:getRequestURI/getContextPath/getServletPath/getPathInfo 这些接口互相之间有什么区别 ...
- Ubuntu 16.04 LTS安装好需要设置的15件事(喜欢新版本)
看到这篇文章说明你已经从老版本升级到 Ubuntu 16.04 或进行了全新安装,在安装好 Ubuntu 16.04 LTS 之后建议大家先做如下 15 件事.无论你是刚加入 Ubuntu 行列的新用 ...
- 实验箱FPGA部分测试报告及A8与FPGA链接测试报告
其实,我一开始还以为实验箱不会有什么问题只是让我们多学习东西才做这个测试的,结果发现还真的有不少问题. 1.实验准备部分 安装驱动时,win10系统无法正确安装usb-blaster Windows ...
- css3动画 bug
1. .myanimate{ transition-property: left;transition-duration: .3s;transition-timing-function: ease } ...
- 每天一个linux命令(34):kill命令
Linux 中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以 使用Ctrl+C键,但是,对于一个后台进程 ...