uniCloud介绍

1,473 阅读5分钟

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代码中分析是否存在权限漏洞要简单的多。这套方案还能让多人协作、或项目二次开发变的更容易,因为规范的存在,新人可以轻易读懂老代码的权限体系逻辑。

image.png

uniCloud提供了一个 JSON 格式的文档型数据库。顾名思义,数据库中的每条记录都是一个 JSON 格式的文档。

image.png 一个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 错误码
    })

image.png

登录例子

调用云函数

// promise方式
uniCloud.callFunction({
    name: '云函数',
    data: { a: 1 }
  })
  .then(res => {});

// callback方式
uniCloud.callFunction({
    name: '云函数',
    data: { a: 1 },
    success(){},
    fail(){},
    complete(){}
});