สวัสดีครับผู้อ่านทุกท่าน สำหรับบทความนี้คิดว่าอยากให้เป็นบทความสรุปแบบรวบรัด สำหรับใครที่อยากจะเริ่มต้นสร้าง Python REST API ด้วยตัวเอง ไม่ว่าจะอยากเอาไปใช้ทำแอพ หรือทำเว็บ หรือจะเอาไปใช้งานร่วมกับอุปกรณ์ IoT ต่างๆได้ตามสะดวก
โดยเนื้อหาในบทความนี้ผมจะขอเลือกใช้แค่ Library Flask แบบเพียวๆ ไม่ได้ใช้งานไลบรารีเสริมอย่าง Flask-Restful เนื่องจากอยากให้ได้ลองเห็นตั้งแต่ข้างล่างเลยว่าเราจะออกแบบ APIs กันเราต้องทำอะไรบ้างลักษณะยังไง
เพราะฉะนั้นก่อนอื่นเลยผมเลยอยากจะแนะนำกันก่อนว่า Rest Framework เนี่ยมันคืออะไร แล้วมีประโยชน์คร่าวๆยังไง (ใครที่รู้จักมาก่อนอยู่แล้วสามารถข้ามไปได้เลยครับ)
บทความนี้เป็นบทความที่เขียนเพื่อกระชับเนื้อหาทั้งหมดของซีรีส์ youtube ทีอยู่ใน chanel ของ Stackpython ถ้าใช้อยากลองชมเนื้อหาเต็มสามารถกดเข้ารับชมได้ที่ https://www.youtube.com/watch?v=zw9ff_0I88Y (ตอนแรก)
จุดประสงค์
หน้าที่ของ GET Method คือใช้สำหรับดึงค่าข้อมูลอะไรซักอย่างจากเซิฟเวอร์
หน้าที่ของ POST Method คือใช้สำหรับสร้างชุดข้อมูลอะไรซักอย่างบนเซิฟเวอร์
หน้าที่ของ PUT Method คือใช้แก้ไขข้อมูลที่มีอยู่บนเซิฟเวอร์อยู่แล้ว (มักจะเอาไปใช้แทนที่เลย)
หน้าที่ของ DELETE Method ก็จะเกียวข้องกับการลบข้อมูลออกจากเซิฟเวอร์
ผมเริ่มจากสร้างส่วนของ GET method โดยตั้งชื่อ route ว่า hello() ให้ชี้ไปที่ / โดยการเขียนเราก็เขียนเหมือน Flask ปกติเพียงแต่ว่าเรา return เป็น dictionary แทนที่จะเป็นหน้าเว็บหรือ template
ก่อนอื่นถ้าใครยังไม่ได้ติดตั้ง Flask ให้ติดตั้งก่อนโดยใช้คำสั่ง pip install Flask
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello():
q = request.args.get('q')
print(q)
return { "message": "Hello!" }, 201
ผมเริ่มจากสร้างส่วนของ GET method โดยตั้งชื่อ route ว่า hello() ให้ชี้ไปที่ / โดยการเขียนเราก็เขียนเหมือน Flask ปกติเพียงแต่ว่าเรา return เป็น dictionary แทนที่จะเป็นหน้าเว็บหรือ template
ถ้าเขียนเสร็จแล้วสามารถลองนำไปใช้ทดสอบได้ โดยโปรแกรมที่ผมเลือกใช้คือ Postman ถ้าใครอยากใช้โปรแกรมอื่นก็สามารถใช้งานได้ตามสะดวกครับ
ลองเขียนมา route หนึ่ง method นึงแล้ว น่าจะเห็นภาพกันมากขึ้นว่าจริงๆแล้วมันก็เหมือนกับเขียน Flask ธรรมดา เพียงแต่เปลี่ยนวิธีการ return เฉยๆ
ต่อไปเราจะมาลองเขียน method ที่ซับซ้อนขึ้นมาคือ method POST โดยสมมติสถานการณ์ว่าเราต้องการสร้าง APIs สำหรับห้องสมุดหรือร้านหนังสือ เอาไว้เก็บบันทึกว่ามีหนังสืออะไรอยู่ในคลังบ้าง
from flask import Flask, request #เพิ่ม request
books = []
@app.route('/book', methods=['POST', 'GET'])
def book():
if request.method == 'POST':
body = request.get_json()
books.append(body)
return { "message": "Book already add to database", "body": body }, 201
elif request.method == 'GET':
return { "books": books }, 200
ผมสร้างตัวแปรมาหนึ่งตัวชื่อ books เป็น list สำหรับเก็บหนังสือแต่ละเล่ม จากนั้นสร้าง route ใหม่ขึ้นมา โดยไปที่ /book แล้วเช็คว่าถ้าเข้ามา POST ก็เพิ่มข้อมูล body ลงไปใน list ที่สร้าง
เพื่อจุดประสงค์ในการทดสอบผมสร้าง route GET ไว้ด้วยเพื่อเอาไว้ดูว่ามีการเพิ่มข้อมูลตามที่ต้องการหรือไม่
ถ้าลองเอาไปใช้ Postman ทดสอบก็จะเห็นว่ามันสามารถใช้งานได้ตามที่ต้องการ
สำหรับ method ต่อไปก็จะเป็น method PUT ซึ่งจะเป็น method ที่แทนค่าข้อมูลที่ส่งมา ทับไปที่ข้อมูลที่มีอยู่แล้วใน Database (มองว่า list ของเราเป็น Database) เพื่อความง่ายในการแยกข้อมูลแต่ละตัวออกจากกันผมจะขอเพิ่ม id เข้าไปในข้อมูลแต่ละตัวด้วยเพื่อให้แยกกันออก
elif request.method == 'PUT':
body = request.get_json()
for i, book in enumerate(books):
if book['id'] == body['id']:
books[i] = body
return {"message": "Book has been replace", "body": body}, 200
ลักษณะการใช้งานก็จะไม่ต่างไปจาก method ประเภท GET, POST (อย่าลืมไปเพิ่ม ‘PUT’ ใน methods ตรง decorator) จะมีส่วนที่ซับซ้อนอยู่ตรงที่ต้อง loop เช็คว่า id ตรงกันมั้ย แล้วก็ทับข้อมูลชุดนั้นไป(เอา body มาทับ) แต่ถ้าไปใช้ database จริงๆก็จะมีตัวช่วยให้ไม่ต้องลูปเช็คเหมือน list
วนมาถึง method ตัวสุดท้ายคือ DELETE ซึ่งเป็น method ที่ใช้ลบข้อมูลตัวนั้นออกจาก database
elif request.method == 'DELETE':
deleteId = request.args.get('id')
for i, book in enumerate(books):
if book['id'] == int(deleteId):
books.pop(i)
return {"message": "Book is deleted"}, 200
ลักษณะการทำงานจะคล้ายๆกับ PUT คือรับค่า id ของสิ่งที่ต้องการลบออกมา แล้วลูปเช็คก่อนที่จะ pop ข้อมูลตัวนั้นออกจาก list
สำหรับ PUT, DELETE การรับค่า id สามารถทำได้โดยวิธีอื่นแต่ในที่นี้อยากลองให้ใช้ body, query เพื่อฝึกให้ชินกับการใช้ 2 สิ่งนี้มากขึ้น
โดยรวมแล้วการเขียน Rest APIs ด้วย Flask ก็จะมีประมาณนี้ ถ้าใครมีคำถามสงสัยอะไรตรงไหนก็สามารถทิ้งคำถามไว้ได้เลยครับ 😊
ติดตามเพิ่มเติมได้ที่ซีรีย์ REST APIs with Flask ในช่องยูทูปของเราได้เพิ่มเติมครับ มีทั้งหมด 7
Episodes
Reference
https://flask.palletsprojects.com/en/1.1.x/
กิจกรรมที่กำลังจะมาถึง
ไม่พลาดกิจกรรมเด็ด ๆ ที่น่าสนใจ
Event นี้จะเริ่มขึ้นใน April 25, 2023
รายละเอียดเพิ่มเติม/สมัครเข้าร่วมคอร์สเรียนไพธอนออนไลน์ที่เราได้รวบรวมและได้ย่อยจากประสบการณ์จริงและเพื่อย่นระยะเวลาในการเรียนรู้ ลองผิด ลองถูกด้วยตัวเองมาให้แล้ว เพราะเวลามีค่าเป็นอย่างยิ่ง พร้อมด้วยการซัพพอร์ตอย่างดี