FastUI: สร้างเว็บ UI ที่เร็วและดีกว่าด้วย Python
(github.com/pydantic)- FastUI เป็นแนวทางใหม่ในการสร้างส่วนติดต่อผู้ใช้ของเว็บแอปพลิเคชันด้วยโค้ด Python แบบประกาศ
- เป็นชุดของโมเดล Pydantic และอินเทอร์เฟซ TypeScript สำหรับนิยามส่วนติดต่อผู้ใช้
- หากเป็นนักพัฒนา Python ก็สามารถสร้างเว็บแอปแบบโต้ตอบด้วย React ได้โดยไม่ต้องใช้ JavaScript หรือ npm
- นักพัฒนาฝั่งฟรอนต์เอนด์สามารถโฟกัสกับการสร้างคอมโพเนนต์ที่นำกลับมาใช้ซ้ำได้ โดยไม่ต้องคอยคัดลอกและวางซ้ำ ๆ
- ทำให้แยกความรับผิดชอบได้อย่างแท้จริง โดยแบ็กเอนด์กำหนดทั้งแอปพลิเคชัน และฟรอนต์เอนด์ทำหน้าที่เพียงแสดงส่วนติดต่อผู้ใช้
- มีคอมโพเนนต์พื้นฐานให้หลากหลาย: การยืนยันตัวตนแบบโทเค็น, GitHub OAuth, Markdown, Text, Paragraph, Heading, Code, Button, Link, Navbar, Modal, ServerLoad, Image, Iframe, Video, Table, Pagination, ModelForm
วิธีใช้งานจริง
- FastUI ประกอบด้วย 4 ส่วน:
- แพ็กเกจ PyPI
fastui: ให้โมเดล Pydantic และยูทิลิตีสำหรับคอมโพเนนต์ UI ทำงานร่วมกับ FastAPI ได้ดี แต่ไม่ได้พึ่งพา FastAPI จึงใช้กับเฟรมเวิร์กเว็บ Python อื่น ๆ ได้ด้วย - แพ็กเกจ npm
@pydantic/fastui: เป็นแพ็กเกจ React TypeScript ที่ช่วยให้นำกลไกและชนิดข้อมูลของ FastUI ไปใช้ซ้ำได้ ขณะสร้างคอมโพเนนต์ของตัวเอง - แพ็กเกจ npm
@pydantic/fastui-bootstrap: ใช้ Bootstrap ในการติดตั้งใช้งาน/ปรับแต่งคอมโพเนนต์ทั้งหมดของ FastUI - แพ็กเกจ npm
@pydantic/fastui-prebuilt: มี FastUI React app เวอร์ชันที่ build ไว้ล่วงหน้าให้ใช้ โดยไม่ต้องติดตั้งแพ็กเกจ npm หรือ build อะไรเอง และแพ็กเกจ Python จะมีหน้า HTML แบบเรียบง่ายสำหรับให้บริการแอปนี้
- แพ็กเกจ PyPI
หลักการ (เวอร์ชันยาว)
- FastUI เป็นการนำหลักการ RESTful มาปรับใช้ แต่ไม่ใช่ในความหมายที่เข้าใจกันทั่วไป หากยึดตามหลักการที่ Roy Fielding นิยามไว้ในวิทยานิพนธ์ปริญญาเอกของเขา
- ตามหลักการ RESTful ฟรอนต์เอนด์ไม่จำเป็นต้องรู้รายละเอียดเกี่ยวกับแอปพลิเคชันที่กำลังสร้าง เพียงต้องมีคอมโพเนนต์ทั้งหมดที่จำเป็นต่อการประกอบเป็นส่วนติดต่อผู้ใช้
- การสร้างแอปพลิเคชันด้วยแนวทางนี้มีข้อดีสำคัญหลายประการ:
- เมื่อต้องสร้างฟีเจอร์ใหม่ จะต้องเขียนโค้ดเพียงที่เดียว
- สามารถแยกการดีพลอยฟรอนต์เอนด์และแบ็กเอนด์ออกจากกันได้อย่างสมบูรณ์
- สามารถนำชุดคอมโพเนนต์โอเพนซอร์สกลับมาใช้ซ้ำได้ เพราะคอมโพเนนต์ไม่จำเป็นต้องรู้บริบทที่จะถูกนำไปใช้
- สามารถใช้ Pydantic, TypeScript และ JSON schema เพื่อรับประกันว่าทั้งสองฝั่งสื่อสารกันด้วยสคีมาที่ตกลงร่วมกัน
นอกเหนือจาก Python และ React
- หลักการนี้ไม่ได้จำกัดอยู่แค่แอปพลิเคชัน Python และ React เท่านั้น หากสื่อสารด้วยสคีมาและการเข้ารหัสที่ตกลงร่วมกันแบบเดียวกัน ก็สามารถใช้ได้กับฟรอนต์เอนด์และแบ็กเอนด์ใด ๆ ที่รองรับสคีมานั้น
ความเห็นของ GN⁺
- FastUI มีศักยภาพในการทำให้กระบวนการพัฒนาง่ายขึ้น โดยเปิดทางให้นักพัฒนาแบ็กเอนด์ขยายแอปพลิเคชันได้อย่างมีประสิทธิภาพโดยไม่ต้องพัฒนาฟรอนต์เอนด์เพิ่มเติม
- เทคโนโลยีนี้ช่วยทำให้การแบ่งบทบาทระหว่างฟรอนต์เอนด์และแบ็กเอนด์ชัดเจนขึ้น และเอื้อต่อการใช้ความเชี่ยวชาญของแต่ละฝ่ายได้อย่างเต็มที่
- ปัจจุบัน FastUI ยังเป็นโครงการที่อยู่ระหว่างการพัฒนา ดังนั้นก่อนใช้งานจริงในโปรดักชันควรประเมินทั้งเสถียรภาพและความสามารถอย่างรอบคอบ
- เมื่อนำ FastUI มาใช้ ควรพิจารณาความเข้ากันได้กับเวิร์กโฟลว์การพัฒนาฟรอนต์เอนด์เดิม การนำคอมโพเนนต์กลับมาใช้ซ้ำและการขยายต่อ รวมถึงการบำรุงรักษาโครงการในระยะยาว
- ข้อดีของการเลือกใช้เทคโนโลยีนี้คือช่วยลดเวลาในการพัฒนาและสนับสนุนเวิร์กโฟลว์ที่ยึดแบ็กเอนด์เป็นศูนย์กลาง แต่ในอีกด้านหนึ่ง ความยืดหยุ่นของฟรอนต์เอนด์อาจถูกจำกัด และการสนับสนุนจากชุมชนกับเอกสารอาจยังมีไม่มากนัก
1 ความคิดเห็น
ความเห็นจาก Hacker News
ความเห็นเกี่ยวกับการเชื่อมโยงกันระหว่างชั้นการนำเสนอและโค้ด
ประสบการณ์พัฒนาแอปด้วย FastUI และ Streamlit
ความเห็นเกี่ยวกับ Django และ HTMX
ความเหมาะสมเชิงปฏิบัติของแอปภายในสำหรับการจัดการอีเวนต์ฝั่งเซิร์ฟเวอร์
การเพิ่มขึ้นของเฟรมเวิร์กฟรอนต์เอนด์ที่ต้องใช้แบ็กเอนด์เซิร์ฟเวอร์
เปรียบเทียบประสบการณ์การใช้งาน FastUI และ NiceGUI
ผลกระทบของความก้าวหน้าด้าน AI ต่อกรณีการใช้งานของโปรเจกต์
ประสบการณ์พัฒนาโปรเจกต์ส่วนตัวด้วย Dart/Flutter
การเปรียบเทียบกับ Java Server Faces และข้อจำกัดของการทำ abstraction ฝั่งเซิร์ฟเวอร์
คำถามว่าการทำ roundtrip กับเซิร์ฟเวอร์เหมาะกับการสร้างส่วนติดต่อผู้ใช้หรือไม่