
在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)討論如何實作以下內容: