สวัสดีครับ! ตอนนี้ผมเป็นนักศึกษาปริญญาตรีที่กำลังเตรียมทำโปรเจกต์จบการศึกษา (และหางาน...) อยู่ครับ
ระหว่างที่เขียนเซิร์ฟเวอร์ REST API ด้วย Flask ผมคิดว่าน่าจะดีถ้ามีเทมเพลตที่รวมฟังก์ชันซึ่งมักใช้ร่วมกันในหลายโปรเจกต์เอาไว้ด้วย เลยสร้างโปรเจกต์นี้ขึ้นมาครับ
ฟังก์ชันที่มีอยู่ตอนนี้มีดังนี้
การสมัครสมาชิก ล็อกอิน และยืนยันตัวตนด้วย JWT (การยืนยันตัวตนด้วย Refresh และ Access token)
......- การยืนยันตัวตนของ Flask-Admin (ออกและตรวจสอบคุกกี้ Admin token อัตโนมัติ)
......- การเพิกถอนโทเค็นแบบแมนนวล (เพิกถอนโทเค็นของผู้ใช้ที่ล็อกอินอยู่บางราย)
......- การยืนยันอีเมลและรีเซ็ตรหัสผ่านด้วยอีเมล (email token)
การใช้งานฟังก์ชันผ่าน docstring และ decorator ของ Python
......- กำหนดเส้นทางที่ต้องล็อกอินและเส้นทางที่แนะนำให้ล็อกอิน
......- กำหนดและจำกัดพารามิเตอร์คำขอ (จัดการฟิลด์ Required/Optional)
............- ตรวจสอบค่าที่รับเข้าทาง Header/Body/Query
......- จัดทำเอกสารคำอธิบายของ route / พารามิเตอร์คำขอ / การตอบกลับที่เป็นไปได้ของ route นั้น
การส่งออกเอกสาร
......- ส่งออกเป็นเอกสาร OpenAPI 3.0 YAML
......- ฟังก์ชันสร้าง ER Diagram (ส่งออก .dot)
ในฟังก์ชันเหล่านี้ ส่วนของล็อกอิน (การยืนยันตัวตนด้วย JWT) และการสร้างเอกสาร OpenAPI 3 ผมเขียนขึ้นเองโดยใช้ PyJWT และ apispec
สำหรับส่วนการสร้างเอกสาร OpenAPI 3 นั้น Flask-RESTful กับ Flask-RESTplus อยู่ในสถานะ unmaintained และ Flask-RESTX ก็ไม่ใช่วิธีใช้งานแบบที่ผมต้องการครับ
นอกจากนี้ ในส่วนของล็อกอินและการยืนยันตัวตน Flask-Login เป็นแบบ session-based และตอนนั้นผมไม่รู้จัก Flask-JWT-Extended มาก่อน (...) เลยลงมือเขียนเองครับ
ถึงจะเป็นงานของนักศึกษาปริญญาตรีที่ทำอย่างเร่งด่วนจนคอมเมนต์ยังไม่พอและโค้ดก็ยังไม่สะอาดนัก แต่ถ้ามองว่าเป็น PoC ว่าสามารถนิยาม API ในลักษณะนี้ได้ก็คงจะดีใจมากครับ!
(จริง ๆ เมื่อกี้ผมเพิ่งโพสต์ไปครั้งหนึ่ง แต่ช่องว่างสำหรับการเยื้องในส่วนฟังก์ชันหายหมดเลย (...) เลยลบแล้วโพสต์ใหม่ครับ ขอความกรุณาเข้าใจด้วย!)
1 ความคิดเห็น
ยังเป็นนักศึกษาปริญญาตรีอยู่ด้วยแต่ยอดเยี่ยมมากเลยนะครับ เป็นกำลังใจให้ครับ!!