作为一个缺乏后端语言能力的前端开发人员来说,有时候想做出“完整能用”的应用是一件困难的事情。因为服务端和数据层的缺失,除了静态的展示性产品,几乎没有能力再做更多。以往,除了学习后端语言,或者利用一些现成的后端模板来完成完整的应用开发,没有别的办法。
作为一个程序员,总会有各种想法,通过自己的代码去创造想要的一切,这多么美妙。
作为前端,只处于这个完整流程的一部分,相对独立却又严重依赖后端,很难做出实际能应用的东西,这又多么悲哀。
直到,BaaS的出现,things have changed 。
一,简介
BaaS(Backend as a Service -- 后端即服务)是一种新型的云服务,旨在为移动和Web应用提供后端云服务,包括云端数据/文件存储、账户管理、消息推送、社交媒体整合等。开发者无需过多研究服务器端程序,而只需调用云计算平台提供的API,使用相应SDK,就能迅速完成上述功能。
我们可以简单且狭义地理解为,BaaS给我们提供了后端服务,也就是说,即使你只是个纯前端开发人员,你也可以依靠BaaS,以一己之力做出完整的可应用的产品。这对于前端开发人员来说,算是一个很大的惊喜了吧!
数据存储服务是大部分BaaS产品的最基本的服务,他们将服务端与数据库操作封装成一套前端语言的api,从而实现了前端操作和存储数据的可能。因此,也就填补了前端在应用开发流程中的缺失。从此,你的应用有了动态的、实时的数据支持,再也不只是一个花架子。
用户管理是很多应用必不可少的模块,当我们有了可用的数据操作和存储,就可以动手去建立自己的用户管理系统。但BaaS的数据操作和渲染在客户端完成,这对用户系统来说,无疑是不安全的。因此大部分BaaS服务商也提供了用户管理功能的。同样通过封装好的接口来实现安全的用户管理系统操作与构建。
一些BaaS服务商还有诸如消息推送,数据分析等等个性化的功能,不一一展开。
二,简单应用
BaaS是近几年的产物,在国外兴起,国内现在也有一些不错的服务商。例如Bmob(自称国内首家专注移动云服务的),leancloud(跟腾讯联合推出了一款BaaS产品Tencent App Builder ,实际只是leancloud的研发产品),还有我今天要作为案例的野狗。野狗并无前两者的名气,也就是这一两年才做,算是后来者了。之所以用野狗,只是因为他是第一款我知道的BaaS服务提供商,加上简洁友善的界面,让人愿意尝试。
起步
1,引入sdk
2,创建实例
数据操作
野狗提供了一套完整的增删改查数据以及简单的数据排序和查询筛选的方法,使用非常简单;Wilddog 云端数据库属于NoSQL类型数据库,数据以 JSON 为格式进行存储,没有传统关系型数据库中的表和记录等概念。管理后台有可视化的数据操作界面;也提供数据导入和导出操作。
其他如leancloud,bmob等产品的数据操作方式也是大同小异,基本都是通过json对象的方式来组织数据。相对来说,个人认为野狗在数据操作的能力上相比有所欠缺,api不够全面,限制了数据的组织方式以及操作数据的方法;对于数据查询也是不够友好,例如单个的数据查询必须在数据排序处理之后才能进行。猜想应该是野狗考虑了复杂和庞大数据的查询操作的效率问题才做出如此限制,但我个人并不认同此种方式,而是应该建议而不强制“查询数据应该在数据排序后处理”。
用户管理
前面有说,用户管理系统是BaaS服务的基本功能之一,野狗也是如此。提供了简单而安全的用户系统构建方法。同时还提供用户数据导入功能,具体没有尝试,估计限制比较大。
野狗提供基础的匿名注册登录方式,邮件注册方式,以及第三方微信,qq,微博等平台登录方式的接入,第三方登录成功会在野狗的用户管理后台统一生成用户资料,方便管理。有些BaaS服务商也会提供手机号验证码方式进行登录注册,例如leancloud,bomb等下面以邮件形式注册登录来演示基本的用法。
通过野狗的邮箱注册方法,传入“email”,“password”两个参数,即可注册。所有这些请求方法都可以添加promise的方式,来对请求状态进行判断和操作。注册之后自动进入登录状态,具体方法就是通过localstorage存储用户相关信息,如果不注销登录,则24小时更新清空一次。
登录的方法与注册无异,就不再赘述。还有一系列用户相关的操作方法,都是非常简单易用,参阅文档即可。
三,使用体会和跳坑手册
相较于刚知道BaaS时的喜悦,在真正使用过一个这样的产品后,我有了更丰富的理解。这类产品对于快速构建应用来说,无疑是非常方便且易用的,显而易见的优势不表,我来说说使用中遇到的问题及感受。
1,稳定性
野狗在注册时,提供了一个邮箱验证的方法。然而我第一次使用时,无论怎样都收不到验证的邮件;查阅文档,各种尝试,最终无果。于是求助野狗客服,6个小时后,最终得到的结果是:邮箱服务器正在维护升级,预计明日9点恢复服务。这让我对BaaS产品的靠谱性产生了动摇,试想如果是依托野狗的正常运营的产品,出现此类情况的话……当然,即使是自己的服务器自己的服务端也会不可避免的出现此类问题,也许只是我恰好遇上而已。
2,邮箱验证
前面提及,野狗有邮箱注册验证。会自动代发一封验证邮件到注册邮箱,然后用户点击链接验证通过后,用户即为已注册并验证的用户。这个邮箱验证与否,主要通过读取当前用户信息的“emailVerified”字段来验证。问题是,当我们验证邮件后返回之前注册页,却无法按照我所希望的状态进行下去。
如图,我在注册成功后,在页面弹出了一个检验邮箱是否验证完成的弹窗。当用户验证邮箱完成,返回当前页面,页面会发送一个请求到野狗,取到用户数据,通过数据中的字段来验证是否通过验证。然而即使验证过邮箱,请求返回的“emailVerified”字段却一直是false,多次尝试未果。只有当刷新当前页面,重新请求该用户信息,得到的“emailVerified”才是我们想要的true。
野狗提供云数据存储和用户管理两大功能,其数据存储服务的数据都是长连接,无刷更新的,所以我想当然的认为其用户系统的数据也是如此。所以一开始,我并没有意识到问题,而是认为自己的方法出了错。于是多次翻阅文档,然而翻了个底朝天,无数次尝试也没有解决问题。于是再次请求野狗客服,最终得到的答案是,“auth模块没有长连接,所以必须要刷新之后才能获取到用户的最新信息”。也就是说,前端通过异步请求获取的信息并不是实时的。这无疑又是一记闷棍,这意味着,你根本无法确定用户何时验证邮件,那么验证用户邮箱的操作无法完成--如果,你限定用户不验证邮箱就无法继续使用产品的话。
3,用户信息无法新增字段
野狗用户信息中,原始的可设置信息有name,email等。我打算在用户信息中新增字段来记录用户的其它信息时,发现请求失败,查看打印的日志信息,竟然发现是,用户信息不能新增自定义字段。哦,这是多么愚蠢的设计。我当然可以通过唯一的用户id来当作标示,在数据存储中新增一些用户信息。可是当我想显示一个用户的名字,年龄或者性别这样的数据时,还要请求用户信息后通过返回的用户id作为查询依据再次查询用户的其它信息,你不觉得这很不科学么?后来看leancloud和bmob的文档,就没有这么愚蠢了。bmob甚至可以让用户管理系统和数据存储系统的数据相互关联,大大方便了用户基本信息和用户其它数据的存取操作(leancloud暂时没发现,不排除有此功能存在)。
4,数据存储
数据存储服务我还没有太深入的去尝试,所以目前大坑还没见到,说说一些体验不好的点吧。
set()方法来新增数据,这个一定要慎用。这个是覆盖操作,并且操作不可逆,野狗也并不提供数据备份服务(收费版不知有没有)。因此如果应用已有部分正式数据,在新增数据操作时,一定要谨慎。json格式的数据类型,一个字段的重设,会导致所有子节点的丢失。
组织数据应该充分考虑,如何设计数据的嵌套方式。避免嵌套过深,数据一多会严重影响数据处理的性能。设计上应该扁平化为主,横向扩展,而不是纵深向下。
键值对的形式上传数据,决定了key不能是规律性变量的特点,也就无法作为一组数据的查询依据,这个有时候不方便。当然野狗会对一组数据生成唯一的key来存储,也提供了获取key相应的方法。但总觉得查询数据的时候比较别扭,可能只是我自己的问题。之后如有新感悟再表。
(待续……)