Python Flask:REST API筆記

寫寫GET與POST、API的基本概念,不深究細節。

Udemy課程

本篇為Udemy課程REST APIs with Flask and Python,Your first REST API章節範例和我的補充說明,透過Python基礎語法讓讀者瞭解API概念。

簡化過的內容,希望以傳達「概念」為主,沒有用過Flask應該還是能心領神會(?)

老師的原始碼放在Github,可前往這裡下載

REST API

API(application programming interface)是應用程式的介面/接口,我們不需要知道背後怎麼執行,只要瞭解要跟它說什麼、以及我們可以拿回什麼。

就像我們去速食店櫃檯點餐,櫃檯店員就像API接口,替櫃檯前的顧客、和後台廚房建立起友誼的橋樑。

當我們和他說「請給我雞腿堡」,不需要管什麼原料、漢堡如何製作,稍待片刻廚房就會完成,並透過櫃檯店員轉手拿到我們面前的餐盤。

我們在接口這端(櫃台店員)說需求,接著他會進行處理,例如去資料庫(廚房)拿東西,處理後告訴我們結果;過程我們只需要等待即可。

REST API(Representational State Transfer API)是一種API的設計風格,關於我們怎麼和資料互動;這邊不深究細節,讀者可以想成是某個共識,例如請、謝謝、對不起,出現的語境會有對應的行為。

GET與POST

兩個最常見的HTTP動作,分別是讀取資料的「GET」、和新增資料的「POST」;就像我們開啟待辦清單,讀取既有列表就像「GET」,新增一筆待辦事項就像「POST」。

從伺服器(應用程式)角度,對使用者發出的這兩個動作可以如此理解:

GET — used to send data back only
POST — used to receive data

延伸閱讀:HTTP GET vs POST — NotFalse 技術客

程式範例

資料結構

課程中用list和dictionary來完成示範,不涉及資料庫;後續回傳的內容都在5–15行的stores資料做編輯異動。

執行Flask

127.0.0.1:5000是本機端。

來看看GET方法

25–29行示範了GET方法回傳上述的stores清單。

當使用者在網址列輸入/store(第25行定義),會回傳透過jsonify函數詮釋過的JSON格式(第29行定義)。

JSON全名為JavaScript Object Notation,是一種資料呈現的格式,因為架構清晰易讀廣為使用,並不受限於特定的程式語言。

如果覺得有點抽象,也可以想成傳統報紙的徵才廣告,密密麻麻小小的閱讀不方便,但水果日報的徵才廣告,同樣的內容排版起來閱讀較為舒適,而後大家都採用後者的排版方式廣泛進行資料交流。

127.0.0.1:5000是本機,/store是路徑,JSON格式

從瀏覽器輸入127.0.0.1:5000/store後,打開終端機可以看到:用「GET」方法去取回「/store」的資料,後面的200狀態碼(HTTP Status)表示成功。

沒有用jsonify會怎樣

…會壞掉。

要把dictionary透過jsonify轉成JSON格式回傳;瀏覽器看不懂Python程式碼,需要轉換成JSON格式。

來看看POST方法

32–40行示範了POST方法新增一家store到stores,並回傳新增store的JSON。

第34行是把我們POST送出的JSON資料,轉換成Python的dictionary,後續建立new_store的dictionary,並把它加入stores清單。

第40行回傳剛剛建立的new_store json格式,讓使用者知道新增成功。

Postman

接著我們換到測試API必備軟體Postman執行Post方法;如果是第一次看到,也可以把它簡單想成是針對特定用途的瀏覽器,方便我們快速執行測試。

Postman

網址同樣是127.0.0.1:5000/store。

還記得剛剛的新增待辦事項舉例嗎?

用Post方法會帶一些資料給伺服器。

我們在Header的設定Content-Type為application/json,意思是等等Send出去會跟伺服器說「嗨我這包JSON格式啦。」

在剛剛的第34行,伺服器會把收到的JSON轉換成Python的dictionary。

Postman

切換到Body,藍色的部分就是我們要新增的資料;按下Send,會回傳剛剛32–40行運作後return的jsonify(new_store),也就是綠色部分。

一間名為Another store的店舖,但items還是空的的JSON資料。

細分到特定店舖以及錯誤訊息

第51行的store not found

這個章節用GET和POST方法示範了五支API,後面三支概念相同,只是細分到特定店舖,並替不存在的商店加上錯誤訊息。

小結

從上述兩個例子,可以看到Python處理資料後、會透過jsonify把dictionary轉成JSON格式再回傳,顯示在瀏覽器、Postman。

而Postman透過Post方法傳給Python的JSON,會先被轉成Python的dictionary格式進行處理,而後透過jsonify把dictionary轉成JSON再回傳。

希望以上說明能幫助讀者對API輪廓稍微清晰一點;老師說明蠻清楚的,也是Udemy的Python熱門課程,參考看看囉。

過往整理的電腦/網路相關內容在:PM筆記

如果文章有所幫助,歡迎鼓掌灌溉、手指留香喔! ✧*。٩(ˊᗜˋ*)و✧*。