微信小程序云开发中我们可以在云函数中调用外部系统的API, 比如企业已有的Rest服务API, 通过这样的方式,可以复用企业原有的逻辑,也可以与企业系统集成或是访问或是调用外部的公共服务。
在本文中,我们通过调用一个公共的天气服务来演示如何在云函数中调用外部API。
新建云函数
首先在构建一个名为 my-note-app 的小程序,开通云开发,然后在 cloudfunctions 中新建一个云函数,并命名为 CallExternalAPI。建好以后,可以看到在 cloudfunctions 中添加了一个名为 CallExternalAPI 的目录,目录中包含两个文件: index.js 和 package.json。都是默认内容:
index.js
1 | // 云函数入口文件 |
package.json
1 | { |
安装第三方库
在小程序的api中,可以使用 wx.request 在小程序端来访问外部的api, 但这些api所在的主机必须被配置在小程序后台,作为信任的主机。现在如果我们希望从云函数中访问外部的API,则不能采用这个方法。因为我们选择使用Nodejs的第三方库开访问。这里我们选择流行的 axios 库。
打开命令行窗口,进入项目中云函数所在的目录。比如项目在 d:\my-note-app 目录,则进入 d:\my-note-app\cloudfunctions\CallExternalAPI 目录,执行 npm 来安装 axios 库。
1 | npm install --save axios |
安装完成后,你可以看到在 package.json 中加入了 axios 的依赖。
1 | { |
同时在命令行中中查看,可以看到在目录中多了 node_modules 目录,里面放的就是相关的依赖库。
1 | my-note-app |
调用天气服务
在 index.js 中增加对天气api的调用,修改后的代码如下:
1 | // 云函数入口文件 |
可以看到,我们新建了一个名为 getWeather 的函数,在该函数中,使用 axios 的 get 访问用了天气服务。并将结果返回。
部署函数到云端
选择函数,点右键,选择 “上传并部署: 云端安装依赖(不上传node_modules)”, 因为package.json 会上传到云端,云端会更加 package.json 对的内容自动安装相关的依赖在云端,这样就可以显著的减少上传的大小和时间,加快部署速度。
从小程序端调用
因为对第三方API的调用被封装在云函数中,故调用和普通的小程序调用云函数一样, 使用 wx.cloud.callFunction 即可。
1 | wx.cloud.callFunction({ |