在開發小程序的時候,常常會用到一些第三方的 API。可是第三方的 API 每每會有各類各樣的問題,好比:javascript
等等。可是,在業務中,咱們又必需要使用這些接口,應該如何操做呢?java
一個比較簡單的方法,就是使用雲開發來作中轉。將有限制的小程序請求,轉化爲沒有限制的雲函數請求,就能夠輕鬆實現未備案、無 HTTPS 接口的請求。npm
在具體的實現時,主要有如下幾個步驟:json
咱們重點講解一下「請求代碼的建立」和「在小程序請求雲函數」小程序
假設咱們要請求快遞 100 的 API,來查詢快遞信息。因爲其沒有 HTTPS 證書,因此咱們沒有辦法直接在小程序端查詢。因此,咱們創建了一個新的雲函數 getKuaiDi 來查詢快遞信息。bash
咱們要調用的 API 地址是 http://www.kuaidi100.com/query?type=快遞公司代號&postid=快遞單號
,咱們只須要將這裏的快遞代號和單號替換,併發送一個 get 請求,就能夠獲取到下面這樣的結果。併發
{ "message": "ok", "nu": "11111111111", "ischeck": "1", "com": "yuantong", "status": "200", "condition": "F00", "state": "3", "data": [ { "time": "2020-02-10 08:47:03", "context": "查無結果", "ftime": "2020-02-10 08:47:03" } ] }
接下來來編寫代碼,首先,咱們須要安裝依賴,在雲函數上右擊,選擇「在終端中打開」,執行命令安裝 gotasync
npm install --save got@9
安裝完成後,咱們開始編寫代碼。由於剛剛安裝了 got ,咱們在雲函數中編寫代碼就簡單許多。函數
const got = require('got') // 雲函數入口函數 exports.main = async (event, context) => { const response = await got(`http://www.kuaidi100.com/query?type=${event.type}&postid=${event.id}`) return response.body }
刪除掉無用的代碼後,咱們只須要保留上面這些代碼,就完成了雲函數側的代碼。post
這段代碼中,經過 ES6 的新語法,拼接了 event 的參數,造成一個完成的 API 地址,並經過 got 請求了咱們剛剛拼接好的 API。再將獲取到的 Response 中的 Body 返回給小程序端。
上傳部署雲函數之後,咱們能夠在小程序端調用這個 API 以驗證。在你的小程序端輸入這樣的代碼
wx.cloud.callFunction({ name:"getKuaiDi",data:{ "type": "yuantong", "id":"11111111111" }}).then(console.log).catch(console.error)
你會看到這樣的返回,則說明你的 API 接口正常工做。
{"message":"ok","nu":"11111111111","ischeck":"0","condition":"B00","com":"yuantong","status":"200","state":"1","data":[{"time":"2020-02-11 11:59:11","ftime":"2020-02-11 11:59:11","context":"攬收任務已分配給王國賢,配送員電話17767187183","location":""}]}
後續,你只須要在調用雲函數的時候,經過 data 參數,傳入快遞公司,以及快遞單號,就能夠完成接口的查詢了。
最後,咱們再總結一下。由於小程序限制了 request 的請求必須是備案域名,且必須有 https,若是你想要請求一個沒有備案,或者沒有 HTTPS 證書的 API,能夠藉助雲函數環境下不受任何限制的 HTTP 請求來獲取到數據,並經過雲函數的返回,返回給小程序端使用。這樣,就能夠很方便的繞太小程序請求的一些限制。