python
flask
api
Flask除了可以用以開發網頁之後,其實它還很適合應用建置一個API Service。說到這個就不能不知道Roy Fielding其論文中所提的REST架構說明,不過這邊只談實作而不說明過多理論,但會建議多少瞭解一下,最少最少瞭解一下一個完美的REST應該有的六個特性。
當我們希望建置一個滿足REST的API SERVICE時要先知道,REST(Resource Representational State Transfer),資源(Resource)是REST的核心,什麼都是資源,每個資源都是一個URI,每個URI都表示一個唯一的資源。舉例來說,http://your_web_service/api/v1/blog/001
,這個URI代表版本v1,取得編號001的貼文,而且這個行為是idempotent(幕等)的,這代表不管你做幾次都會得到相同的結果(部份method除外)。
為什麼要有版本?因為可能會調整,但你的API可能已經open出去,已經很多開發人員在使用了,你不可能就突然調整為另一個版本,這可能會造成引用你API的客戶端程式異常。
呼叫API的幾種方式,GET、POST、PUT、PATCH和DELETE,其中GET、POST是最常用的,每次都會有相對應的狀態回應,像是200、201、400、404、405,這都有相對應的標準定義。
呼叫API之後會取得資源,這個資源的回應用什麼格式?JSON或是XML(一般來說現在都採用JSON),要取得相對應的回應就需要在發出request的時候設置Content-Type: application/json
讓server端知道你需求的格式為JSON。
所以你的response的資料格式可能是這樣:
這邊可以看的到,author
的資料並不是直接給author,而是另一個URI,這麼做的好處在於,開發人員只需要有頂層的API就可以,剩下的就透過說明一路給開發人員探索就行了。
另外,想要弄API Service並不是一定要滿足REST,就好像也有人寫Python也不Pythonic一樣。只是一但你滿足REST規範,那你就很RESTful。總之就是很潮就是了。
說那麼多實在是不如親手做一遍,首先建立一個新的專案,並設置虛擬環境,然後安裝需求套件,專案名稱設置為"pyAPI"。
新增一個python文件,命名為pyAPI.py
我們載入的套件除了Flask
,另外還有一個jsonify
,並且設置兩個API,一個是利用flask所提供的jsonify
,一個是自己利用json.dumps
,快速瞭解有什麼差異。
執行專案之後,直接開啟chrome,按f12,點擊Network:
然後我們先連接test_api
,網址輸入http://127.0.0.1:5000/test_api/
,這是利用flask所提供的jsonify
回傳的json格式資料:
上圖紅框處注意。
然後再連接test_api2
,網址輸入http://127.0.0.1:5000/test_api2/
:
上圖紅框處注意。
兩相比較就清楚了,原來使用flask所提供的jsonify
,它會幫我們處理好response的Response Headers的部份。
當然如果你真的想要自己處理的話也可以,再追加載入套件
接著再加入一個接口:
見下圖紅框處:
透過一個簡單的案例,我們已經對WEB API有一個最簡單的認識,後續再接著說明API建置的部份。