นักพัฒนาย้ายจาก FastAPI ไปยัง Litestar อ้างสถาปัตยกรรมที่ดีกว่าและปัญหาเอกสารประกอบ

ทีมชุมชน BigGo
นักพัฒนาย้ายจาก FastAPI ไปยัง Litestar อ้างสถาปัตยกรรมที่ดีกว่าและปัญหาเอกสารประกอบ

นักพัฒนาเว็บ 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