日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

web api接口开发实例_小程序开发如何调用 API 接口,以豆瓣电影为例

發布時間:2025/3/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 web api接口开发实例_小程序开发如何调用 API 接口,以豆瓣电影为例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

API 調用是開發者在小程序開發過程中經常會遇到的問題,本期我們以為調用豆瓣電影 API 為例具體來看 API 的調用過程以及常見的一些問題。

測試用到的小程序是「電影周周看」,內容來自清華大學軟件學院劉強副教授在「學堂在線」上的小程序開發系列課程

簡單了解豆瓣 API

為了簡化課程講解,我們將采取直接調用的方式,沒有使用 OAuth2 的認證,也沒有申請和使用對應的 apikey,所以這種調用會有比較嚴格的受限。

我們會以調用豆瓣電影條目信息 API 為例,這個 API 可以用來獲取電影詳情信息,具體怎么調用呢?

先來看下它的

URI:/v2/movie/subject/:id,

在這個目錄下有一個冒號 id,這是一個 Restful 的 API 設計方式,就是將你要指定的目標電影的 id 直接在 URI 的路徑中進行包含,而不是通過 querystring 的方式來指定。

我們通過瀏覽器來試一下這個 API 調用的結果。先輸入豆瓣 API 的域名,再連接上 API 的路徑,最后加上目標電影的 id,這里我們指定的是電影「教父」的 id 值 1291841 。

通過這樣的一個 http request 請求返回的原始數據是一個 json 對象的格式文本,在它的 json 對象的格式中返回來很多對應的字段信息,比如 rating 反映了這部電影的各種評分,wish count 字段反映了有多少人想看這部電影,images 字段給出了三個不同尺寸的電影海報圖片 URL,title 字段給出了電影的標題等等。

403 Forbidden 問題的干擾

在前面的邏輯中,每一次 detail 頁打開,在它初始化的時候就能夠從 options 參數對象中獲取到本次要打開要展示的目標電影的 id,接下來就需要調用豆瓣的這個條目信息 API。將這個 id 傳過來,然后由這個 API 返回 id 對應的電影詳情數據。

前面我們看到過完整的 URL 是這個樣子。

目標電影的 id 是直接 通過 URL 路徑的一部分來直接進行傳遞的。所以這個地方的 data 屬性我們不用定義,因為沒捎帶額外的數據,header 屬性我們也不定義,method 參數默認用 GET 方法,因此也不指定。

那這里就指定了一個 success 的回調函數,我們先看一下它接收到的 response 對象會是什么,執行一下調用,返回的卻是 403 Forbidden。

從返回的結果看,里面對應的「教父」電影的 id 值是 99 ,前面我們了解到「教父」電影的 id 值是 1291841, 替換正確的 id 后我們再調用一次。

這個時候我們得到了正確的 URL,它和我們剛才通過瀏覽器直接訪問條目信息 API 時是一樣的 URL。

通過瀏覽器直接訪問能正確地獲得對應的 json 對象文本,通過小程序 request 的方法調用API 返回的卻是 403 Forbidden,這是什么原因?

這是因為,在今年年初,來自小程序的直接、公開的調用過多,豆瓣 APIserver 就將來自于小程序的直接調用給禁止了。

大家可能會問,那么豆瓣的 APIserver 怎么樣判定對它的調用請求是來自于小程序呢?

小程序在它的每一個請求中都設置了固定的 Referer 的 header 字段,豆瓣的 APIserver 收到一個請求后,如果它發現這個 Referer header 的取值是小程序框架固定的格式,它就會直接返回一個 403 Forbidden 的 response。

那我們是否可以在 request 調用的時候通過定義 header 參數來修改對應的 Referer header 的取值?小程序框架它同時也將對 Referer ?header 的設置給禁掉了,也就是說我們在 request 調用時,在 header 參數中來設置 Referer 的 header 也是無效的。

從這一點我們也可以看到,小程序對它的每一個 http 請求打上了自己的一個固定烙印,那么我們要怎么解決這個問題?

我們可以通過一個中間的服務器來對 Referer 的 header 進行重新設置,具體的,我們可以在小程序和豆瓣 API server 之間設置一個對應的 nginx 轉發代理來實現。

我們在 nginx 轉發代理中做一個page,將它接收到的 Referer 的 header 改成一個隨便的值。nginx 轉發代理收到小程序發送過來的請求后,會將小程序中固定住的 Referer ?header 烙印給抹掉,然后再將 request 發送豆瓣 APIserver ,豆瓣 APIserver 會將這個請求當作普通的請求進行處理,這樣一來就能正常地返回對應的詳情數據。

因為小程序請求的每一服務器域名必須先進行 ICP 備案,然后才能在后臺等級配置使用,在課程講解的時候我們還來不及對自己的域名進行備案,所以我們就直接使用一個第三方的針對豆瓣 ?API 的轉發代理。

我們將這個請求從原來的直接發送給都豆瓣 APIsever 改為先發給 nginx 轉發代理。

運行之后,我們發現這次收到的是一個 400 bad request 的響應。這個問題又如何解決?

針對這個問題我們必須在請求的時候對 http 請求設置一個特定的 content type 的 header 的取值。

當我們將這個取值設置為 json 之后,本次 request 方法調用沒有拋出任何錯誤,而且在 success 回調函數處理時顯示的 是一個 200 OK 的 response。

并且在 data 屬性中,我們成功地保存了本次 API 調用返回的目標電影詳情數據對應的 json 文本對象轉化而來的一個 javascript 對象,而它實際上就是對這個目標電影各個詳情數據的一個封裝。

在收到返回到目標電影詳情數據之后,我們就可以將它保存到頁面的一個內部狀態數據中。

我們先通過 onload 方法的 this 指針將這個頁面的頁面對象的引用做一個保存,將其保存到一個 that 變量中,然后在 success 回調函數處理的時候直接通過 that 變量來獲取外部頁面對象的引用,接著,再訪問其中的 setData 方法。

調用之后,我們在 APPdata type 中進行查看,最終在 detail 頁面中找到了名為 movie 的內部狀態變量,這其中就包含了這部電影對應的各種詳情數據。

detail 頁的具體展示

接下來我們就將接收到的詳情數據渲染輸出到視距圖中進行展示。具體的展示辦法就是通過新增的內部狀態變量 movie 對電影詳情對象中的相關屬性進行數據綁定來實現。

我們將接收到的電影詳情對象中的 summary 屬性、 wish count 屬性、collect count 屬性等等都通過數據綁定的方式渲染輸出到對應的元素上進行顯示。

對 images 元素我們也可以將它的高度、寬度做一個設置,做一個簡單的樣式優化。

這時,我們再看看頁面中的其他的兩部電影,點擊它們以后返回的是 404 Not Found。這是因為這兩部電影的 id 并不是真實的豆瓣 id,因此豆瓣電影的 APIserver 就返回了一個 404 響應。

實際上這時候我們還是進入了 success 回調函數的處理,我們依然將接收到的 data 屬性的取值保存到了內部狀態變量 movie 中,所以這個時候 movie 的取值被保存成了這樣的一個對象,但它不是一個正常的電影詳情數據的對象,在這個對象中找不到我們需要的各種字段數據。

因此在一般處理中,我們需要單獨做一個判斷,只將返回的正常數據保存到內部狀態變量中。我們再來判斷一下它是不是一個 200 OK 的 response。

這個時候我們并沒有在 detail 頁上來新增這么一個內部狀態變量 movie,而只有當這個電影能真正找到,返回的是一個 200 OK 的 response 的時候,對應的 movie 這個內部狀態變量才有可能添加。

我們將其他兩部電影的 id 都改為正確的值,之后再點擊每一部電影,它對豆瓣 APIserver 的調用都能正常運行。

以上就是本期關于豆瓣電影 API 調用的全部內容。

來源:高校微信小程序開發大賽

  • 掃碼,京東優惠購書中

  • 本 書 介 紹

  • 作者:周文潔

  • 定價:79.80元

  • ISBN:9787302518037

  • 600分鐘超長視頻講解!本書是一本從零開始學習的微信小程序開發入門書,無需額外的基礎。全書以項目驅動為宗旨,循序漸進、案例豐富,詳細介紹了微信小程序的入門基礎知識與使用技巧。

  • 全書共分為12章,主要內容包括4個部分。第一部分是入門篇,包括第1章和第2章的內容,這兩章介紹了小程序的由來、首次注冊和創建項目流程;第二部分是基礎篇,包括第3章和第4章的內容,這兩章介紹了小程序框架和組件;第三部分是應用篇,包括第5~11章的內容,這7個章節分別講解了微信小程序中網絡API、媒體API、文件API、數據API、位置API、設備API以及界面API的用法;第四部分是提高篇,包括第12章的內容,這一章節提供一個綜合應用設計示例——高校新聞小程序的設計與實現,綜合應用了全書所學知識,讓讀者所學即所用。全書包含完整例題應用110個,均在微信web開發者工具和真機中調試通過,并提供全套例題源代碼、練習題和視頻講解。

  • 福? 利

  • 如果你在京東購買了本書,請將訂單和評價截圖發到郵箱itbook8@163.com,?可以免費獲取額外贈送的大量視頻、知識圖譜、題庫等資源(如下圖)。

總結

以上是生活随笔為你收集整理的web api接口开发实例_小程序开发如何调用 API 接口,以豆瓣电影为例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。