3 คะแนน โดย musoftware 2021-10-02 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

สวัสดีครับ! ตอนนี้ผมเป็นนักศึกษาปริญญาตรีที่กำลังเตรียมทำโปรเจกต์จบการศึกษา (และหางาน...) อยู่ครับ

ระหว่างที่เขียนเซิร์ฟเวอร์ 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 ความคิดเห็น

 
xguru 2021-10-03

ยังเป็นนักศึกษาปริญญาตรีอยู่ด้วยแต่ยอดเยี่ยมมากเลยนะครับ เป็นกำลังใจให้ครับ!!