1、什么是uniCloud
uniCloud 是 DCloud 联合阿里云、腾讯云,为开发者提供的基于 serverless 模式和 js 编程的云开发平台。
uniCloud是DCloud在阿里云和腾讯云的serverless服务上封装而成的。
开发者可以自主选择uniCloud的硬件和网络资源的供应商,在阿里云版和腾讯云版之间切换。(目前腾讯云仅提供1个免费服务空间,最多可创建49个收费服务空间。阿里云最多可创建50个免费服务空间。)
【serverless】下一代云技术,是真正的“云”。
传统的云服务,让开发者免于购买实体服务器硬件,改为购买虚拟机。但开发者仍然要自己装操作系统、web服务器、数据库,自己处理热备,自己新购服务器来应对高并发,自己抗DDOS攻击...
真正的云计算,就像用水用电,没有复杂的门槛,即用即有、按需付费。
serverless的云,开发者只需要按量租用这些计算和存储能力,再也不用关心扩容和攻击。当用户量激增时,开发者什么都不用做,系统自动承载更高并发。开发者只需要按照对资源的消耗付费即可。同理,如果没有用户使用,即没有资源消耗,则根本无需为云资源付费。
开发者写好云端业务代码,即js编写的云函数,通过HBuilderX部署到uniCloud上即可。
2、uniCloud的价值
- 对于程序员,用熟悉的js,轻松搞定前后台整体业务。
- 对于开发商:
- 开发成本大幅下降、开发效率大幅提升、上线和迭代速度大幅提速;
- 如果你是新创公司,将无需雇佣php或java等服务器工程师,每年至少节省几十万;
- 如果你已拥有掌握php和js的全栈,那么改用新的技术栈,一样可以大幅提升开发效率、降低成本;
- 你只需专注于你的业务,其他什么服务器运维、弹性扩容、大并发承载、防DDoS攻击,全都不需要操心;
- 除了开发成本,云资源租用成本也将大幅下降
- 如果不发布H5版,你将不需要购买备案域名。小程序和App可以免域名使用服务器;
3、uniCloud降低前端掌握后端的门槛
前端工程师想掌握后端开发,有6大门槛:
- 学习php、java等非js的语言
- 学习数据库设计
- 学习SQL
- 学习linux、nginx等系统和三方软件
- 学习服务器运维:熟悉负载均衡、大并发处理。了解各种复杂的云厂商产品目录和报价
- 学习系统安全:避免业务安全漏洞(权限漏洞、防SQL注入)、操作系统和三方软件补丁、DDoS等网络攻击 而有了uniCloud,这些门槛全都降了下去:
- uniCloud采用js编写后端服务代码,无需单独学习php或java,甚至也无需提前掌握nodejs。看下uniCloud的api文档即可。
- uniCloud基于serverless,开发者无需了解linux、nginx,无需熟悉负载均衡、大并发处理,不用关心系统补丁和DDoS攻击,只需要用js写好云端业务代码,上传到uniCloud即可。
- uniCloud推出了opendb,包含了大量的开源数据库模板(uniCloud web控制台),常见数据表无需自己设计。通过opendb模板,开发者可以快速掌握数据库设计。
- SQL在过去也需要单独学习,尤其是复杂的联表查询、Tree查询,掌握很不容易。uniCloud推出了JQL(Javascript Query Language),会js即可掌握数据库查询,更对联表查询、Tree查询提供了非常简便的操作封装。
- uniCloud提供了uni-id,无需自己开发账户体系,登录、注册、修改密码、角色权限体系、token管理一应俱全。
- uniCloud在DB Schema中提供了与uni-id的角色权限体系配套的数据权限控制方案。这套方案让小白也不会在权限控制中犯错。在一目了然的权限配置清单中可以轻松发现漏做的事情,比以往在大坨php代码中分析是否存在权限漏洞要简单的多。这套方案还能让多人协作、或项目二次开发变的更容易,因为规范的存在,新人可以轻易读懂老代码的权限体系逻辑。
uniCloud提供了一个 JSON 格式的文档型数据库。顾名思义,数据库中的每条记录都是一个 JSON 格式的文档。
一个uniCloud服务空间,有且只有一个数据库。一个数据库支持多个集合(表)。一个集合可以有多个记录。每个记录可以有多个字段。
4、JQL数据库操作
jql,全称javascript query language,是一种js方式操作数据库的语法规范。(.jql文件)
const db = uniCloud.database() //获取数据库实例
// 使用`jql`查询list表内`name`字段值为`hello-uni-app`的记录
db.collection('list')
.where('name == "hello-uni-app"')
.get()
.then((res)=>{
// res 为数据库查询结果
}).catch((err)=>{
// err.message 错误信息
// err.code 错误码
})
登录例子
调用云函数
// promise方式
uniCloud.callFunction({
name: '云函数',
data: { a: 1 }
})
.then(res => {});
// callback方式
uniCloud.callFunction({
name: '云函数',
data: { a: 1 },
success(){},
fail(){},
complete(){}
});