在Day 29:物聯網幽靈的RESTful API 謎題.芝麻開門中提到:用Flask
來建立一個RESTful API
,並且要按照「宿舍訪客名單 API 的需求規格」需求規格,用 Flask 跟 PyMongo
來實作API
,然後用Postman
來測試它的功能和效能。
這個程式碼的目的是建立一個宿舍訪客名單的網路服務,讓使用者可以透過網路來查詢、新增、修改或刪除訪客的資料。
這就像是管理員要先定義好另一種規則,如果有人要修改或刪除特定的訪客資料,他們要用網址 http://192.168.1.100:5000/visitors/ 來跟管理員聯絡。
# 定義路由和 HTTP 方法,並使用變數 id 傳遞參數,並使用 auth.login_required decorator 要求驗證
@app.route("/visitors/<id>", methods=["PUT", "DELETE"])
@auth.login_required
def visitor(id):
@app.route("/visitors", methods=["GET", "POST"])
有點不同。路由參數傳遞
,可以定義路由網址接收參數,例如:@app.route('/user/<username>')
(Nanami Lemon, 2021)
# 如果是 PUT 方法,則修改一筆訪客資料
if request.method == "PUT":
# 取得請求中的 JSON 資料
data = request.get_json()
# 檢查 JSON 資料是否包含所有必要的欄位
if data and all(key in data for key in ["name", "age", "gender", "phone", "address"]):
# 執行 update_one 修改符合 id 的訪客資料,並取得修改的筆數
result = mongo.db.visitors.update_one({"_id": id}, {"$set": data})
count = result.modified_count
# 如果修改的筆數為零,則回傳 404 狀態碼和錯誤訊息
if count == 0:
return jsonify({"status": 404, "message": "Visitor not found"}), 404
# 如果修改的筆數不為零,則回傳 200 狀態碼和修改的筆數
else:
return jsonify({"status": 200, "count": count}), 200
# 如果 JSON 資料不完整,則回傳 400 狀態碼和錯誤訊息
else:
return jsonify({"status": 400, "message": "Missing or invalid data"}), 400
if request.method == "PUT":
:通常用來進行資源更新 (林信良, 2013)。
取得請求中的 JSON 資料request.get_json()
:
在撰寫Flask Web來存取Mongo DB (3)中,POST程式碼部分有提到:
Flask API要取得request的值的其中一種方式,取得JSON的值 (無言小獅子, 2022)。
檢查 JSON 資料是否包含所有必要的欄位["name", "age", "gender", "phone", "address"]
:
在撰寫Flask Web來存取Mongo DB (3)中,POST程式碼部分有提到:
JSON的資料格式中,用中括號[]表示的是陣列(array),是一系列的值(value)所組成的 (silly_letter,2022)。
執行 update_one 修改符合 id 的訪客資料,並取得修改的筆數update_one
:在MongoDB指令(2)中有提到:update_one
指令是用來更新文件的,就像是圖書館裡的一本書被借走了,要更新資訊為──已借出。
如果修改的筆數為零,則回傳 404 狀態碼和錯誤訊息
在撰寫Flask Web來存取Mongo DB (3)中,GET程式碼部分有提到:
常常聽到的404(not found)
是一種HTTP Status Code
,代表找不到請求的資源 (jim_chung, 2020)
如果修改的筆數不為零,則回傳 200 狀態碼和修改的筆數
在撰寫Flask Web來存取Mongo DB (3)中,GET程式碼部分有提到:
一般正常回應的情況下,會回傳200(OK)
代表成功 (jim_chung, 2020)
如果 JSON 資料不完整,則回傳 400 狀態碼和錯誤訊息
在撰寫Flask Web來存取Mongo DB (3)中,POST程式碼部分有提到:400狀態碼
:是一種HTTP Status Code
,代表錯誤的請求
( Hypertext Transfer Protocol: Response Status Codes)。
表示伺服器無法或不願處理請求,因為伺服器認為這是客戶端的錯誤(可以想像成用外送平台點餐時,如果外送員發現你的訂單內容有問題,或是地址寫錯還要請外送員免費幫你送到更遠的地方,外送員可能會棄單)。
# 如果是 DELETE 方法,則刪除一筆訪客資料
elif request.method == "DELETE":
# 執行 delete_one 刪除符合 id 的訪客資料,並取得刪除的筆數
result = mongo.db.visitors.delete_one({"_id": id})
count = result.deleted_count
# 如果刪除的筆數為零,則回傳 404 狀態碼和錯誤訊息
if count == 0:
return jsonify({"status": 404, "message": "Visitor not found"}), 404
# 如果刪除的筆數不為零,則回傳 200 狀態碼和刪除的筆數
else:
return jsonify({"status": 200, "count": count}), 200
if request.method == "DELETE":
:通常用來刪除資料 (林信良, 2013)。
update_one
:在MongoDB指令(2)中有提到:update_one
指令是用來從集合中刪除單一文件,就像是從圖書館下架一本書,要把這本書的資訊從圖書館的系統中刪掉。撰寫Flask Web來存取Mongo DB (1)討論如何實作以下內容:
撰寫Flask Web來存取Mongo DB (2)討論如何實作以下內容:
撰寫Flask Web來存取Mongo DB (3)討論如何實作以下內容: