开发过微信小程序的同学肯定都知道,小程序在使用网络相关的 API 时,必不可少的一环就是服务器域名配置,因为微信开发者文档中明确指出:
其中,支持https访问相对来说还是比较简单的,业内也有免费的 SSL 证书解决方案Let's Encrypt。但是,服务器域名的 ICP 备案就有点麻烦了。不是说备案流程复杂(正常流程一周内还是可备案通过的),而是麻烦在服务器所在的一些云主机不具备国内的备案条件,比如 Google Cloud Platform(简称 GCP)。
那么,有没有一种方法可以绕开服务器域名的 ICP 备案进行小程序的后台接口调用呢?方法还是有的,即利用微信给每个小程序配备的云开发环境来实现。
开发者可以使用云开发开发微信小程序、小游戏,无需搭建服务器,即可使用云端能力。
云函数无需自建服务器,在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码
其中,每个小程序至多可以申请两个开发环境,且开发的环境只有 Nodejs8.9 一种版本。可以利用Nodejs8.9 环境做一个中转,在云函数中直接访问未备案的域名或者 IP。这两者还是建议采用域名,后面会讲原因。
以上方法的优点有:
1.如果只使用云函数就能覆盖小程序的业务,甚至省下了服务器的钱
2.可以不备案,也能实现相关的业务功能(此处并未推荐大家不备案,请遵守国内法律,老老实实去备案)
3. 如果在云函数中采用域名访问,还能拥有一定的容灾能力。比如,一台域名对应的主机宕机了,可以手动将 DNS 解析切换到备用主机上
当然,缺点也很明显:
1. 云函数作为一个跳板,用户发起的接口是有被转发的,一定程度上会影响用户体验,比如接口耗时慢,页面响应迟钝等
2. 如果是 GCP 的主机,那么肯定没有部署在国内(笑~),从国外访问国内很可能会出现严重丢包的情况,比如丢包 98%。这种情况相当于业务功能失效,中转的方案也就失效了
3. 由于 Nodejs8.9 版本太老,一些在后续版本中原生支持的功能只能接入三方依赖来完成,但又受腾讯云环境影响而无法实现。比如,iltorb 需要 native binding 才能使用,而目前自动安装依赖和上传全部依赖都无法做到
另外,域名和备案之间不是充分必要条件。你有一个域名,你可以选择不备案;但是如果你要备案的话,你必须得有一个域名,且有一个云主机。
目前,阿里云的云主机有一个活动,就是“备多久送多久”,即在所购买云主机的有效期内备案成功,就能延期到备案成功那天。举个例子,在 2020 年 4 月 17 日购买了一年期的云主机,到期日为 2021 年的 4 月 17 日,此时在 2020 年的 4 月 23 日备案成功,云主机就会延期到 2021 年 4 月 23 日过期。