นักพัฒนาเว็บ Python กำลังมองหาทางเลือกอื่นนอกเหนือจาก FastAPI มากขึ้น โดยหลายคนได้ค้นพบ Litestar เป็นทางเลือกที่น่าสนใจ การอภิปรายได้ทวีความรุนแรงขึ้นเมื่อนักพัฒนาแบ่งปันประสบการณ์จริงของพวกเขากับทั้งสอง framework เผยให้เห็นความแตกต่างทางสถาปัตยกรรมที่สำคัญซึ่งส่งผลกระทบต่อแอปพลิเคชันขนาดใหญ่
ปัญหาการเติบโตของ FastAPI ในการใช้งานจริง
นักพัฒนาที่ได้สร้างแอปพลิเคชันขนาดใหญ่ด้วย FastAPI รายงานความหงุดหงิดกับข้อจำกัดของ framework ข้อร้องเรียนที่พบบ่อยที่สุดมุ่งเน้นไปที่เอกสารประกอบที่เน้นการสอนและข้อจำกัดทางสถาปัตยกรรมที่ชัดเจนเฉพาะในโครงการที่ซับซ้อนเท่านั้น นักพัฒนาหลายคนพบว่าตัวเองต้องเขียนชั้น framework กำหนดเองบนส่วนบนของ FastAPI เพื่อจัดการกับความต้องการระดับองค์กร
การรวม SQLModel ซึ่งได้รับการส่งเสริมอย่างหนักในเอกสารประกอบ FastAPI ได้กลายเป็นจุดเจ็บปวดเป็นพิเศษ สมาชิกชุมชนรายงานว่าขาดการสนับสนุนสำหรับ polymorphic models และมี pull request ที่ไม่ได้รับการตรวจสอบนั่งรออยู่หลายเดือน ทำให้เกิดคำถามเกี่ยวกับการบำรุงรักษาและความสามารถในการใช้งานระยะยาว
ฉันคิดว่าฉันเป็นคนเดียวที่ต้องโทษที่เลือก FastAPI ในการสร้างโครงการใหญ่ แต่หลังจากที่ได้ใช้มันมากพอสมควรแล้ว ฉันจะไม่แนะนำมันสำหรับสิ่งที่จริงจัง
ปัญหาทั่วไปของ FastAPI ที่มีการรายงาน:
- SQLModel ขาดการรองรับโมเดลแบบ polymorphic
- Pull request จากชุมชนที่ยังไม่ได้รับการตรวจสอบ
- เอกสารที่เน้นการสอนไม่เพียงพอสำหรับการใช้งานจริงในระดับ production
- ต้องการชั้น framework แบบกำหนดเองสำหรับแอปพลิเคชันที่ซับซ้อน
- ปัญหา circular import ในแอปพลิเคชันที่มีหลายไฟล์
- พึ่พาอย่างหนักกับ add-on จากบุคคลที่สามสำหรับฟีเจอร์ระดับองค์กร
ข้อได้เปรียบทางสถาปัตยกรรมของ Litestar
Litestar แก้ไขปัญหาโครงสร้างหลายอย่างของ FastAPI ผ่านปรัชญาการออกแบบ ไม่เหมือนกับแนวทางของ FastAPI ที่ route decorator ถูกผูกกับ application object, Litestar ใช้ standalone route decorator การเปลี่ยนแปลงเล็กๆ ที่ดูเหมือนจะไม่สำคัญนี้ขจัดปัญหา circular import ที่รบกวน FastAPI application หลายไฟล์และลดความจำเป็นในการใช้วิธีแก้ปัญหาที่ซับซ้อนเช่น API router หรือ blueprint
ระบบ composable router ของ framework ช่วยให้นักพัฒนาสามารถจัดชั้นฟังก์ชันการทำงานได้อย่างสง่างาม Route สามารถลงทะเบียนหลายครั้งด้วยการกำหนดค่าที่แตกต่างกัน ทำให้สามารถทำสถานการณ์เช่นการมี endpoint เดียวกันรองรับทั้ง API key authentication สำหรับ machine-to-machine request และ session authentication สำหรับผู้ใช้มนุษย์
การเปรียบเทียบเฟรมเวิร์ก:
- ประสิทธิภาพ: รายงานระบุว่า Litestar เร็วกว่า FastAPI ในการทดสอบประสิทธิภาพ
- การลงทะเบียนเส้นทาง: Litestar ใช้ decorators แบบแยกเดี่ยว ในขณะที่ FastAPI ใช้ bound decorators
- การรองรับไฟล์หลายไฟล์: Litestar หลีกเลี่ยงปัญหา circular import ที่เป็นปัญหาใหญ่ของ FastAPI
- ฟีเจอร์ในตัว: รวมการยืนยันตัวตน แคชชิ่ง การบันทึกล็อก และการส่งออกเมตริกส์
- การผสานรวม ORM: รองรับ SQLAlchemy ได้ดีกว่าด้วยการผสานรวม Advanced Alchemy
ประสิทธิภาพและความสมบูรณ์ของฟีเจอร์
ข้อเสนอแนะจากชุมชนระบุว่า Litestar มีประสิทธิภาพเหนือกว่า FastAPI ใน benchmark ในขณะที่ยังคงความรู้สึกเบา framework มีฟีเจอร์ในตัวที่โดยทั่วไปต้องการการเพิ่มเติมจากบุคคลที่สามใน microframework อื่นๆ เช่น ระบบ authentication, caching framework, การรวม logging และการ export metrics ในรูปแบบ Prometheus หรือ OpenTelemetry
นักพัฒนาชื่นชมการสนับสนุน msgspec แบบ first-class ของ Litestar และ Controller class สำหรับ nested routing เป็นพิเศษ framework ยังรวม event system ที่นักพัฒนารายงานว่าต้องสร้างด้วยตนเองเมื่อใช้ FastAPI
คุณสมบัติหลักของ Litestar:
- รองรับ msgspec แบบชั้นหนึ่ง
- คลาส Controller สำหรับการจัดเส้นทางแบบซ้อน
- ระบบ event ที่มีอยู่แล้วในตัว
- สถาปัตยกรรม router แบบประกอบได้
- การผสานรวม Advanced Alchemy สำหรับ SQLAlchemy
- ระบบ DTO สำหรับการสร้าง schema อัตโนมัติ
- รองรับรูปแบบการยืนยันตัวตนหลายแบบ
ความแตกต่างปรัชญาเอกสารประกอบ
การอภิปรายเผยให้เห็นความหงุดหงิดที่กว้างขึ้นกับเอกสารประกอบ Python framework สมัยใหม่ นักพัฒนาหลายคนแสดงความผิดหวังกับแนวโน้มไปสู่เอกสารประกอบแบบการสอนมากกว่าการอ้างอิง API ที่ครอบคลุม แนวทางนี้ซึ่งยืมมาจาก JavaScript framework ทำให้ยากต่อการหาข้อมูลที่แม่นยำเกี่ยวกับ method parameter และตัวเลือกการกำหนดค่าโดยไม่ต้องเจาะลึกเข้าไปใน source code
เอกสารประกอบของ Litestar ใช้แนวทางที่มีโครงสร้างมากกว่า นำเสนอแนวคิดสถาปัตยกรรมตั้งแต่เนื่อนๆ มากกว่าการปฏิบัติต่อพวกมันเป็นทางหนีสำหรับข้อจำกัดของการสอน อย่างไรก็ตาม สมาชิกชุมชนบางคนสังเกตว่าแม้แต่เอกสารประกอบของ Litestar ก็อาจได้ประโยชน์จากคู่มือ how-to มากกว่าควบคู่ไปกับเนื้อหาอ้างอิง
แนวโน้มการย้ายจาก FastAPI ไปยัง Litestar สะท้อนให้เห็นระบบนิเวศการพัฒนาเว็บ Python ที่กำลังเติบโตซึ่งนักพัฒนาให้ความสำคัญกับความสามารถในการบำรุงรักษาระยะยาวและความมั่นคงทางสถาปัตยกรรมมากกว่าความง่ายในการใช้งานเริ่มแรก ดังที่นักพัฒนาคนหนึ่งกล่าวไว้ พวกเขาวางแผนที่จะย้ายไปยัง Litestar ทันทีหลังจากค้นพบความสามารถของมัน เน้นย้ำถึงความดึงดูดใจที่เพิ่มขึ้นของ framework สำหรับแอปพลิเคชันที่จริงจัง
อ้างอิง: Litestar is worth a look