iT邦幫忙

2026 iThome 鐵人賽

DAY 11
0

上一篇我們認識了幾個可以幫助 Flask 開發 API 的套件。

Flask 本身就可以建立 API,但是也可以搭配一些套件,讓開發和整理 API 更方便。

今天就來正式使用 Flask-RESTX!

安裝 Flask-RESTX

前面我們已經安裝過 Flask,現在要再安裝 Flask-RESTX。

在終端機輸入(記得要先啟動虛擬環境):

pip install flask-restx==1.3.2

裝好之後可以確認一下版本:

pip show flask-restx

https://ithelp.ithome.com.tw/upload/images/20260925/201838652buLHQsS5R.png

安裝完成後,先來建立一個簡單的 API:

app.py

from flask import Flask
from flask_restx import Api, Resource

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

@api.route('/tasks')
class Tasks(Resource):
    def get(self):
        return {
            "name": "Flask",
            "completed": False
        }

if __name__ == '__main__':
    app.run(debug=True)

這裡先注意一件事

今天的 app.py 是「整份重寫」的,裡面沒有 Day 8 寫的:

@app.route('/')
def hiiiii():
    return "Hi Flask!"

如果直接在舊的檔案上面加 Flask-RESTX,記得要把這一段拿掉。

因為 Flask-RESTX 預設會把 Swagger API 文件放在 / 這個路徑(Day 12 就會用到),
如果 / 已經被我們自己的 Route 佔走了,打開 http://127.0.0.1:5000/ 就只會看到 Hi Flask!,
會以為 Swagger 沒有出現。

我自己就是這樣卡了一下,所以先提醒一下。

一行一行看

跟前幾天寫的 Flask 程式比起來,多了一些新的東西。

跟前面使用 Flask 一樣,安裝完套件後,如果想要在這個程式中使用裡面的東西,就需要先匯入

from flask import Flask
from flask_restx import Api, Resource

第一行是從 flask 中匯入 Flask
第二行就是從 Flask-RESTX 中匯入等等會用到的 Api 和 Resource
接著:

app = Flask(__name__)

是建立 Flask 物件並存進 app 這個變數

api = Api(app)

把剛剛建立的 Flask app 傳給 Api,建立一個和 Flask app 連接的 Api 物件,並存進 api 這個變數

所以我們現在還是在使用 Flask,只是多了 Flask-RESTX 提供的功能來幫助我們開發。

前面已經建立了 api 這個 Api 物件,所以現在使用 Flask-RESTX 設定 API 路徑

可以使用

@api.route('/tasks')

設定 /tasks 這個 Path

在前面 Flask 是用

@app.route('/tasks')

接著會看到:

class Tasks(Resource):

Resource 是 Flask-RESTX 提供的一個類別,
這裡建立了一個叫做 Tasks 的類別,來整理 /tasks 這個 API 要處理的程式。

這裡有兩個一開始會誤會的地方:

第一,class 的名字跟 Path 沒有關係。

我們把它叫做 Tasks,只是因為它在處理作業。
就算改成 class Abc(Resource),只要 @api.route(‘/tasks’) 沒變,路徑一樣是 /tasks。
真正決定路徑的是上面的 @api.route()。

第二,裡面的 method 名稱不能亂取。

def get(self):

是用來處理 GET Request

所以 /tasks 收到 GET Request 時,就會執行 get() 裡面的程式,最後回傳。

Flask-RESTX 是直接用 method 的名字去對應 HTTP Method 的,而且要小寫。
寫成 def GET(self) 或 def getTask(self) 都不會被當成 GET 來處理。

如果之後還要處理 POST,也可以在同一個 Tasks 裡加入

def post(self):

這樣 GET Request 會交給 get(),POST Request 會交給 post(),不同的 HTTP Method 就可以整理在一起。

這也是 Day 10 說的:用 Resource 把同一個路徑的不同 Method 收在一起。

執行看看

接下來就執行它

python app.py

打開

http://127.0.0.1:5000/tasks

瀏覽器會對 /tasks 發出 GET Request。

Flask-RESTX 找到 /tasks 對應的 Resource,
因為這次是 GET Request,所以會執行 get()

python
def get(self):
    return {
        "name": "Flask",
        "completed": False
    }

回傳

{
    "name": "Flask",
    "completed": false
}

瀏覽器打開 /tasks 看到 JSON 的畫面
https://ithelp.ithome.com.tw/upload/images/20260925/20183865Un4YMAU2P6.png
這裡可以再對照一次 Day 9:

我們在 Python 寫的是 False,回傳出來變成 false,
一樣是被轉成 JSON 了,只是這次是 Flask-RESTX 幫我們處理的。

流程:

GET Request 到 /tasks
        ↓
Flask-RESTX 找到 /tasks 對應的 Resource
        ↓
因為是 GET Request
        ↓
執行 get()
        ↓
回傳資料
        ↓
Response

到這裡,我們已經使用 Flask-RESTX 建立出第一個簡單的 API。

不過 Flask-RESTX 還有一個很方便的功能,就是可以幫我們建立 Swagger API 文件。
下一篇就來看看 Swagger 是什麼,以及怎麼透過 Swagger 查看和測試我們的 API。


上一篇
Day10 | Flask 開發 API 還有哪些套件?
下一篇
Day 12|Swagger API 文件
系列文
從零開始的後端開發:用 Flask 實作 REST API,搞懂 API 與資料庫之間如何協作 共 15 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言