一个完整的BaaS平台应该包含哪些功能服务

原创文章,转载请注明:转载自Keegan小钢
微信订阅号:keeganlee_me
写于2012-11-29


前段时间,写了篇文章,总结了移动后端服务BaaS现状,只是对几个代表性的平台做了简单的总结描述,这次,我想深入探讨一下:一个完整的BaaS平台应该包含哪些功能服务?

一 、版本管理

随着平台和应用不断升级,总是很难完全向下兼容支持所有旧版本的,所以版本管理是很有必要的,包括平台对SDK的版本管理,以及对app的版本管理,只要有非常简单的版本控制就足够了。平台服务器和SDK的版本应该保持一致,而SDK需要提供接口获取平台服务器的最新版本以及支持的最小版本。如果当前使用的SDK版本太旧而不被支持了,就应该提醒用户更新版本了。而对于app的版本管理,主要用于自动检查更新和升级,除了提供接口获取最小支持版本号和最新版本信息外,还需要有下载最新app的接口。

二、数据存储

数据存储则是最基本的服务了,主要就是实现增删改查的操作,可以通过前端的SDK,还可以通过后台的数据管理界面。

因为每个应用总有各种不同的数据模型,而且复杂点的数据模型之间还有嵌套关系或其他关联关系,所以平台应该提供灵活的SDK,方便开发者定义和扩展自己的各种数据模型,要能支持复杂模型的数据操作。比如,二叉树节点Node,其关联另外两个子节点Node left,Node right,那么,向服务器请求读取一个节点时,就应该有一个灵活可控制的层次值用来表示要读取多少层的嵌套数据,比如,两层则可读取到该节点的左右子节点,以及其左右子节点各自的左右子节点。同样的,插入时也一样。

因为每个应用也都有各种不同的业务逻辑,包括前端的,也包括后端的,所以不仅需要提供灵活可扩展的前端SDK,还需要提供可以处理后端逻辑的API。开发者可以在后端自己写代码接收并处理从前端传过来的自定义命令,也可以添加只在后端自动运行的逻辑代码,还可以对已存在的操作前后增加自己的逻辑,比如插入数据的前后,提供beforeCreate()和afterCreate()接口。

三、用户管理

用户管理应该分为两部分:用户数据的管理和用户关系的管理。

先说用户数据的管理。用户也是一种数据模型,所以用户数据的管理应该拥有和普通的数据存储一样的功能服务,拥有灵活可扩展的前端SDK和后端逻辑API。除此之外,因为用户还是一种特殊的数据模型,所以也有一些独有的功能,比如注册、登录、取回密码等。大部分应用,一个用户只有一个登录ID,然而,也有可以用多个ID登录的,比如微信、米聊、微博。所以,支持多ID有着更好的扩展性。

用户关系可分为单向的关注和双向的好友,还可以对关注对象或好友划分圈子或分组。对用户关系的管理,主要就是管理关系表或集合。SDK里则需要提供一些相应的接口,如关注某人、取消关注、添加好友、查看好友、设置分组等。

四、角色管理

匿名用户和注册用户,或者免费用户和付费用户,这算是最简单的角色分类了;而复杂的就如大企业的人员架构。要能支持复杂的层级结构,平台就需要提供对角色的继承扩展功能,继承后的角色也拥有被继承的角色一样的功能和权限。

对角色的管理也不需要很复杂,只需要对角色表或集合进行增删改查操作即可。关于用户拥有哪些角色,则应该在用户的接口中管理。而关于角色拥有哪些权限,也应该在权限直接作用的那端进行控制,比如,对某个表或集合的操作权限,就应该在表或集合的接口中定义允许哪些角色做哪些操作。

角色管理也只需要在后端管理,而不需要提供给前端的SDK,前端最多只能查看某用户的角色。

五、权限控制

比如,对于学生成绩表,只有任课老师才有写的权限,而学生只有读的权限;你写的某条微博可以设置公开,或某个分组可见,或完全私密。这些都需要通过权限设置进行控制。

权限控制包括对表或集合的权限控制以及对每条数据的权限控制,要对增删改查的每种操作都分别设置权限,可以设置公开,设置某些用户可操作,或设置某些角色可操作。

对表或集合的权限控制,应该只在平台后端进行设置。加了权限之后,是对整个表或集合起作用的。而对每条数据的权限控制,需要通过对每条数据独立设置ACL进行控制,一般在新增的时候添加ACL,也可以随时修改,比如,将一篇本来公开的博文修改为博友可见,这应该是随时可修改的。为了开发方便,还应该可以设置一个全局默认的ACL,而不需要每次对每条数据都要独立添加ACL。而且,对整个表或集合设置的权限应该高于对每条数据设置的权限。

六、文件管理

文件管理需要考虑到很多问题,比如:文件的上传下载是很耗流量的;而且在移动设备因为内存较小,对上传下载的文件大小也有限制,Android设备使用Bitmap最大就不能超过4M;另外,图片也有不同大小的各种尺寸,比如头像一般较小,相册图片则比较大;还有,对同一张图片,一般上传只需要一次,而下载则可能是多次的;因为移动网络经常不稳定,文件上传下载的过程中还可能出现网络断线的情况。考虑到这些问题,文件管理就需要拥有以下功能:

  1. 对图片做不同尺寸大小的压缩,以适应不同大小的图片上传和下载。

  2. 对已下载的图片缓存到本地。

  3. 支持网络断线后重连的文件续传,可以对文件分割之后分段上传。

  4. 提供上传和下载进度。

七、推送服务

推送不同于轮询,轮询是客户端定时向服务端发送请求,而推送则是服务端有需要时才向客户端推送消息,不同的消息将会推送给不同的用户或设备。推送服务还需要考虑到一些特殊情景,比如,同个用户登录两台不同设备,如果同时在线,那应该两台设备都能收到推送信息,如果不同时在线,那先登录的那台设备收到推送信息后,后登录的就不应该再收到同样的推送信息。再比如,一台设备有两个用户切换登录,推送给A用户的信息就不应该让B用户收到。

推送服务需要定义好哪些信息推送到哪些用户。通常都为每个用户设置不同的标签值,发送信息时则根据标签值做条件去查询符合条件的用户。而接收时,不同类型的信息也要做不同的处理。比如,Android可以直接在状态栏显示通知,也可以通过广播接收通知。

推送服务也要支持离线推送,就算你把应用关了,还是可以接收到推送信息。当然,如果应用关闭后不想再收到推送信息,也要有个开关设置是否离线接收推送信息。

八、地理信息服务

地理信息服务就是提供服务查询附近的人或物。比如,移动版的微博可以查看周边的人,也可以查看周边的微博。简单的地理信息服务就只需要提供可以在数据模型中加入地理位置坐标点,以及提供地理位置查询,比如查询某个点附近,或某个四边形区域内,或某个圆区内。再扩展服务还可以获取设备当前位置信息,比如哪条街道哪个位置,还可以加入地图服务,查询范围也可以更复杂,如查询广州市内的,或某栋大厦里面的。

九、数据导入与导出

为了方便应用的移植,数据导入与导出的功能也是很有必要的。方便的数据导入可以吸引到更多开发者将已有应用移植到本平台,而数据导出功能也不会让开发者觉得数据绑定在此平台而有所顾虑,从而更能放心使用此平台。

十、应用统计分析

应用统计分析并不是必需的,但提供此服务,对开发者是非常有用的,可以帮助开发者很清楚地了解到其应用各方面的发展情况。专业的应用统计分析可以统计很多东西,基本的数据统计,用户分析,渠道分析,终端分析,错误分析,等等。基本的数据统计就是统计今天以及每月的累计用户数、活跃用户等。用户分析就更具体分析每天每周和每月的累计用户、新增用户、活跃用户、使用时长等。渠道分析则分析不同渠道的安装量、活跃用户多少、使用时长等。终端分析则分析各种品牌机和平台系统的使用情况。错误分析则是统计错误日志。

总结一下:其实,上面列举的所有功能服务并非全都要自己实现,比如应用统计分析,可以与更专业更成熟的第三方平台合作,比如友盟。而平台早期的时候也不需要实现所有功能服务,可以后续慢慢完善。还有,每种应用平台总有多客户端,Android、iOS、WP8,以及web端,甚至还有桌面端。为了能最大限度支持各种平台系统,最好这些主流系统都能提供相应的API。


扫描以下二维码即可关注订阅号。