อัปเดตล่าสุด April 30, 2024
การทำ APIs ด้วย Flask นั้นก็สะดวก ง่าย และรวดเร็ว ไม่เปลืองทรัพยากรอะไรมากมาย ซึ่งก็ค่อนข้าง Lightweight ดังคอนเซ็ปต์ไมโครเฟรมเวิร์กของ Flask เลยครับ ซึ่ง Flask ก็มีคุณสมบัติครบตามที่เว็บเฟรมเวิร์กควรจะมีเลย หลัก ๆ นั่นก็คือการจัดการกับ Request ที่เข้ามาจากฝั่ง Client และมีการ Response ข้อมูลกลับไปที่ clients
สร้าง Mock-up data ขึ้นมาเพื่อทดสอบ API โดยจะเก็บในรูปแบบ List ที่มีชื่อว่า data
แล้วใน List ก็จะเก็บแยกเป็น Dictionary เพื่อเก็บข้อมูลเฉพาะของแต่ละเว็บเฟรมเวิร์ค ในรูปแบบของ {‘Key’: ‘Value’}โดยข้อมูลก็จะมีดังนี้
data = [{"id": 1,"frameworks": "Django","year": 2005},{"id": 2,"frameworks": "Flask","year": 2010},{"id": 3,"frameworks": "Web2Py","year": 2007}]
ข้อมูลเหล่านี้ที่จะถูก response กลับไปที่ฝั่ง Client ในรูปแบบของ JSON(JavaScript Object Notation) ซึ่งเป็นมาตรฐานการรับส่งข้อมูล ที่ได้รับความนิยมสูงสุดในปัจจุบัน
โดยเราก็จะต้องทำการแปลงข้อมูลที่อยู่ใน List ของเราที่เก็บไว้ในตัวแปร data ไปเป็น JSON ด้วยเมธอด jsonify
ก็ทำการอิมพอร์ตเข้ามาใช้งานได้เลยครับ
from flask import Flask, jsonify
/api
โดยตัวเมธอดใน URL ก็จะเป็นเมธอด GET นั่นก็คือ Client สามารถเรียกดูข้อมูลนี้ได้เท่านั้น ไม่สามารถทำอย่างอื่น เช่น เพิ่ม แก้ไข หรือลบข้อมูล ที่อยู่ใน end-point นี้ @app.route('/api', methods=['GET'])def get_api():return jsonify(data), 200 # response data
@app.route('/api/<int:fw_id>', methods=['GET'])def get_fw(fw_id):"""This endpoint returns a specific framework by ID."""fw = [fw for fw in data if fw['id'] == fw_id]if len(fw) == 0:return jsonify({'error': 'Framework not found'}), 404return jsonify(fw[0]), 200
@app.route
เพื่อกำหนด URL ของ Endpoint นี้ โดยใช้ URL Parameter ชื่อ fw_id
ซึ่งเป็นตัวเลขจำนวนเต็ม (int) เพื่อระบุ ID ของ Framework ที่ต้องการดึงข้อมูGET
เพื่อให้ Client สามารถดึงข้อมูลได้อย่างเดียว ไม่สามารถแก้ไขหรือลบข้อมูลผ่าน Endpoint นี้ได้get_fw
จะรับ Argument fw_id
ซึ่งเป็น ID ของ Framework ที่ต้องการ จากนั้นจะค้นหา Framework ใน List ของ data ที่มี id ตรงกับ fw_id
fw_id
จะคืนค่า Error Message และ Status Code 404 (Not Found) กลับไปให้ ClientFinal Code
from flask import Flask, jsonifyapp = Flask(__name__)data = [{"id": 1,"frameworks": "Django","year": 2005},{"id": 2,"frameworks": "Flask","year": 2010},{"id": 3,"frameworks": "Web2Py","year": 2007}]@app.route('/')def home():return "Hello World"@app.route('/api', methods=['GET'])def get_api():return jsonify(data), 200@app.route('/api/<int:fw_id>', methods=['GET'])def get_fw(fw_id):"""This endpoint returns a specific framework by ID."""fw = [fw for fw in data if fw['id'] == fw_id]if len(fw) == 0:return jsonify({'error': 'Framework not found'}), 404return jsonify(fw[0]), 200if __name__ == "__main__":app.run(debug=True)
รัน Flask Server
$ python app.py
จากนั้นเข้าไปที่ URL
และลองทดสอบเข้าไปที่ URL ของฟังก์ชันที่เข้าถึงแต่ละ ID ดูครับว่าได้ข้อมูลแบบไหนกลับมา
เพียงเท่านี้ก็ถือว่าเราได้สร้าง REST API ด้วย Flask Python สำเร็จแล้วครับ ถึงแม้ว่าใน API endpoint นี้จะมีเพียงแค่ดึงข้อมูล (GET) แต่ก็ถือว่าเป็นจุดเริ่มต้นที่ดี ให้เราต่อยอดไปในระดับสูงขึ้นในบทเรียนถัดไปก็จะเป็นการสร้าง API ที่มีความซับซ้อนมากขึ้น
พัฒนาเว็บด้วย Flask สุดยอด micro-web framework ยอดนิยมของ Python สำหรับ…