第十屆鐵人賽 flask-restful DAY15-搞懂如何建立Resource

flask-restful起手式

在經過flask基本教程、restful以及POSTMAN的教程後終於要準備進入flask-restful的教程了,今日的教程教授大家如何使用flask-restful、如何配置程式碼以及透過POSTMAN發出第一個請求。

安裝flask-restful

在使用之前不外乎就是安裝函式庫了,相信經過之前教程各位讀者應該有想法如何安裝,若是沒有想法請看以下例子:

$ pip install flask-restful

相信輸入上述指令的大家應該可以順利安裝完成flask-restful。

第一個resource

在完成flask-restful安裝後可以開始restful的開發了,今天先簡單介紹大家如何寫一個restful api,所以簡單教學先把所有的內容寫在一個app.py上面,不過這不是一個好的示範,因為所有的內容都寫在一個檔案要怎麼維護阿。所以後續會介紹flask-restful要如何配置,但各位讀者請先看看以下例子:

起手式

from flask import Flask

app = Flask(__name__)


if __name__ == "__main__":
    app.run()

相信大家對這例子不陌生吧,這就是最一開始介紹給大家的例子,當然flask-restful也要從這邊出發,所以我們添加一些東西後,就成了下列例子了:

from flask import Flask
from flask_restful import Api

app = Flask(__name__)
api = Api(app)

if __name__ == "__main__":
    app.run()

就這樣flask-restful的初始化就完成了,然而儘管如此還沒有辦法提供api給使用者提交請求,所以接下來要做的事就是新增一個resourece,而restful就是以資源為基礎,每一個項目都可以是一個資源,所以我們在添加一個resource在原來的內容之中。

from flask import Flask
from flask_restful import Api

from flask_restful import Resource

class PrintHelloWorld(Resource):
    def get(self):
        return {
            'message': 'Hello Wrold!'
        }, 200


app = Flask(__name__)
api = Api(app)

api.add_resource(PrintHelloWorld, "/print_hello_world/")

if __name__ == "__main__":
    app.run()

到這裡就有東西可以說明了,這裡我們先import一個Resource,再來每個項目都源自於Resource,所以我們建立一個新的項目繼承Resource如同上述例子PrintHelloWorld,再來我們時做一個簡單的方法get這也呼應到到時客戶端的請求所需提交的method,之後在get內實作當伺服器端收到這method的請求要做甚麼,以及返還甚麼資訊給客戶端。在我們這例子就簡單返還一個JSON的訊息格式以及status,最後一個動作就是把新建立的Resource註冊到flask-restful之中,就是例子內的api.add_resource(PrintHelloWorld, "/print_hello_world/")這式子,其中第二個參數是將這Resource綁定到url/print_hello_world/,第三個參數明天會加以說明,就這樣我們第一個Hello World restful api就完成了,接下來我們看看要怎麼提交請求來呼叫這api,不過在提交請求之前請先用以下指令執行這app.py

$ python app.py

如果沒辦法執行請先確定一下virtualenv是否用了,或者pip是否安裝需安裝的套件。

第一個POSTMAN請求

POSTMAN 第一個請求

首先先來看看我們請求的url:

眼尖的讀者會覺得很奇怪,怎麼會有{{url}}這種網址呢,這就是要介紹POSTMAN強大功能之一的環境變數,當讀者們點擊眼睛的按鈕會出現下面內容:

POSTMAN 環境設定視窗

就是在這邊我們定義了{{url}}是甚麼,所以當我們想要請求到production的伺服器時則不需要改所有的請求集合,只要修改環境變數的內容即可,這裡眼尖的讀者也看到INITIAL VALUECURRENT VALUE,至於這兩個內容有何差異,在此筆者先賣個關子,之後會再接著介紹POSTMAN其他強大功能是在加以說明。最後當按下SEND讀者們應該會看到以下內容。

POSTMAN 第一個回應

這就是POSTMAN接收到伺服器返還的status 200以及JSON格式的response。到此就完成我們第一個restful api了。

配置應用程式結構

儘管讀者想要把所有的內容都寫在app.py也是可以,但是這樣會很難維護,所以這部分告訴大家如何整理flask-restful檔案結構,這裡請大家看看下列內容:

myapi/
    __init__.py
    app.py          # this file contains your app and routes
    resources/
        __init__.py
        foo.py      # contains logic for /Foo
        bar.py      # contains logic for /Bar
    common/
        __init__.py
        util.py     # just some common infrastructure

以上是官網提供的檔案結構內容,所以把所有資料寫在一個app.py就到今天為止,明天開始會針對每個Resource放在resources資料夾之內。還有往後幾天會在新增幾個資料夾,到時候再說明該內容了。

小結

今天教程教授大家如何安裝、建立、測試自己所撰寫的flask-restful api,基本上今日的教程回不斷的載往後的日子出現。明日要教授大家如何撰寫一個GET的請求,敬請期待。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *