小程序云开发
1、 基本概念
小程序云开发是集成于小程序控制台的原生 serverless 云服务。核心功能包括:云存储、云数据库和云函数。小程序云开发解决了传统开发模式下开发效率低、资源投入高、产品上线慢和日常运维难等问题。
开发者可以使用云开发开发微信小程序、小游戏,无需搭建服务器,即可使用云端能力。云开发为开发者提供完整的原生云端支持和微信服务支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现快速上线和迭代,同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥。
云开发提供了几大基础能力支持:
能 力 | 作 用 | 说 明 |
---|---|---|
云函数 | 无需自建服务器 | 在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码 |
数据库 | 无需自建数据库 | 一个既可在小程序前端操作,也能在云函数中读写的 JSON 数据库 |
存储 | 无需自建存储和 CDN | 在小程序前端直接上传/下载云端文件,在云开发控制台可视化管理 |
云调用 | 原生微信服务集成 | 基于云函数免鉴权使用小程序开放接口的能力,包括服务端调用、获取开放数据等能力 |
云函数
云函数即在云端(服务器端)运行的函数。在物理设计上,一个云函数可由多个文件组成,占用一定量的 CPU 内存等计算资源;各云函数完全独立;可分别部署在不同的地区。开发者无需购买、搭建服务器,只需编写函数代码并部署到云端即可在小程序端调用,同时云函数之间也可互相调用。
云开发的云函数的独特优势在于与微信登录鉴权的无缝整合。当小程序端调用云函数时,云函数的传入参数中会被注入小程序端用户的 openid,开发者无需校验 openid 的正确性因为微信已经完成了这部分鉴权,开发者可以直接使用该 openid。
当前,云函数支持Node.js,后续将支持PHP、Java、Python等语言。
云存储
云开发提供了一块存储空间,提供了上传文件到云端、带权限管理的云端下载能力,开发者可以在小程序端和云函数端通过 API 使用云存储功能。
在小程序端可以分别调用 wx.cloud.uploadFile
和 wx.cloud.downloadFile
完成上传和下载云文件操作。
云数据库
云开发提供了一个 JSON 数据库,顾名思义,数据库中的每条记录都是一个 JSON 格式的对象。一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个 JSON 数组,数组中的每个对象就是一条记录,记录的格式是 JSON 对象。
云调用
云调用是云开发提供的基于云函数使用小程序开放接口的能力,目前覆盖以下使用场景:服务端调用、开放数据调用和消息推送。
服务端调用:云调用需要在云函数中通过
wx-server-sdk
使用。在云函数中使用云调用调用服务端接口无需换取access_token
,只要是在从小程序端触发的云函数中发起的云调用都经过微信自动鉴权,可以在登记权限后直接调用如发送模板消息等开放接口。开放数据调用:云开发的云调用,可直接获取微信开放数据。接口如果涉及敏感数据(如wx.getWeRunData),接口的明文内容将不包含这些敏感数据,而是在返回的接口中包含对应敏感数据的
cloudID
字段,数据可以通过云函数获取。消息推送:云开发也支持通过云函数接收小程序消息推送(如接收到客服消息时触发云函数)。只需两步即可完成接入。
2、云开发与传统开发对比
在传统开发模式中,开发者需要从小程序端通过额外引用的SDK请求后端,需要关心弹性伸缩、异地容灾、网络防护、安全加固等众多条件。过多的业务逻辑需要处理,导致开发效率偏低。而传统开发模式下,前后端分离与联调,往往导致上线效率低。在人力物力上,从物理机托管,到云主机,再到容器,始终需要投入不少的人力物力。
相比而言,云开发模式中,开发者从小程序端通过小程序原生接口请求云开发即可。
云开发模式具备优势如下:
- 开发更简单
使用云函数时,用户只需编写最重要的核心业务代码,不再需要关心负载均衡、自动伸缩、网关等组件,也无需构建应用的后端服务,极大地降低了后端开发搭建的复杂性。无需手动配置,云函数即可根据请求量自动横向扩缩,自动安排合理的计算资源满足业务需求。
- 开发更高效快捷
云函数不要求特定框架或依赖,开发者可以专注于核心代码的开发。同时开发人员可以组成多个小团队,单个模块的开发无需了解其他团队的代码细节。
独立开发和迭代的速度变得前所未有的快,帮助用户把握住产品上线的黄金时间。开发可以使用云函数编写一些目的单一、逻辑独立的业务模块,因而可以完全复用已经成熟的第三方代码实现。
- 运维更省事
每个云函数都是单独运行、单独部署、单独伸缩,用户上传代码后即可自动部署,免除单体式应用部署升级难的问题。
用户不再需要对 OS 入侵、登录风险、文件系统安全、网络安全和端口监听做复杂的配置和管理,一切交由平台处理,平台通过定制化的容器保证每个用户的隔离性。
- 成本更低
按请求数和资源端运行收费,极大节约时间和成本,同时还提供一定量端免费额度。
云开发的缺点:
1.云函数运算时间不得超过3秒
超过3秒未处理完成,直接返回错误。2.云函数单次返回数据不得超过1M
超过1M直接报错3.云函数读取数据库较慢
云函数 云数据库感觉应该在同一物理环境下,但其实并不是,应该处于不同的云端,因为读取100次数据就已经超过3秒了4.云函数并发次数有限
这个文档里面配额写得很清楚,免费版并发数只有20次,这里的并发估计是每秒钟调用次数,因为确实很慢很慢,据我实践,每隔半秒调用一个云函数,调用100遍,还是报告调用次数超限。5.云函数不适合做数据库的较大数量查询功能
鉴于上述4点功能,意味着不要在云函数进行较大的数据读取操作,只适合进行10条左右的敏感数据读取,如用户信息等。因为进行较大数据查询时,要么因为返回数据量过大被报错,要么因为访问数据时间过长被报错,也不要想着分几次从云函数从获取小数据再到前端组合,因为云函数并发数有限制,请把读数据库的操作交给前端直接读取,虽然这样不安全……6.云函数云端测试功能超慢
建议在前端写一个js测试云函数功能,因为感觉云端测试功能慢十倍,网络不好有时还会报错……7.云函数读取云数据库单次最多读取100条
超过100条需要使用 skip() ,分多次将数据组合起来8.小程序前端读取云数据库单次最多读取20条
一样使用skip() ,需要注意的是,小程序前端不能使用 skip(0),会报错,所以在第0页时,取消skip()函数-
9.异步请求需要通过Promise来处理
在云函数中,我们大多会实现一些再小程序中无法实现,或者受域名限制的请求接口,这是我们不能适用传统的callback方法来进行请求,因为传统的callback方法执行完成后,云函数早已将数据返回给客户端,我们需要使用Promise来处理。
-
10.权限结构比较简单
小程序云开发提供的数据库权限仅有四种
模式 读自己创建的数据 写自己创建的数据 读他人创建的数据 写他人创建的数据 管理端 读写任意数据 仅创建者可写,所有人可读 √ √ √ × √ 仅创建者可读写 √ √ × × √ 仅管理端可写,所有人可读 √ × √ × √ 仅管理端可读写:该数据只有管理端可读写 × × × × √ 简而言之,管理端始终拥有读写所有数据的权限,小程序端始终不能写他人创建的数据,小程序端的记录的读 写权限其实分为了 “所有人可读,只有创建者可写“、”仅创建者可读写“、”所有人可读,仅管理端可写“、”所有人不可读,仅管理端可读写“。
对于绝大多数情况,简单的使用这四种权限根本无法满足我们的要求,因此,我们还需要在代码层面进行一些判断来确保具体的表现如我们所想的那样。
-
11.对外开放限制多
一个正常的小程序项目一般都会配一个后台管理系统,这个后台管理系统与小程序共用一个数据库,来对数据进行管理。由于小程序云开发自带的云数据库在小程序内部,外部要是想访问这个数据库则需要一个稍微复杂的流程:
先使用官方接口获取到调用凭证,在通过这个凭证使用指定的接口来对数据库进行增删改查。此外这个流程中消耗的资源也是算在基础配置里的,每日请求上线5万次。
-
- 后期移植不方便
如果企业完全使用云开发开发小程序,然后由于某种原因不能使用这种方式了,想独立部署后端的话,将要面临如何移植的问题。云开发太依赖微信平台了。
3、小程序云开发适合什么样的场景?
所有的业务逻辑都仅仅需要在小程序端完成,无需过于复杂的管理逻辑(这是因为云函数、云数据库无法在小程序以外的区域调用,因此无法实现强大的 Web 管理界面)。