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

延伸閱讀: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筆記

我喜歡透過分享幫助更多朋友,文章回饋、或是任何想法,歡迎透過臉書訊息與我聯繫。如果文章有所幫助,別忘了鼓掌灌溉、手指留香喔! ✧*。٩(ˊᗜˋ*)و✧*。

一個人的文藝復興

你現在的氣質裡,藏著你走過的路,讀過的書和愛過的人。

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store