FastAPI-fastkit: เครื่องมือสแคฟโฟลด์โปรเจกต์แบบ all-in-one สำหรับผู้เริ่มต้น Python และ FastAPI
(github.com/bnbong)สวัสดีครับ/ค่ะ ช่วงนี้วงการพัฒนา AI ร้อนแรงยิ่งกว่าร้อนแรงเสียอีก ทำให้มีผู้สนใจหลั่งไหลเข้ามาใช้ FastAPI ซึ่งเป็น Python backend framework กันมากขึ้นอย่างเห็นได้ชัด
ผม/ฉันเป็นนักพัฒนาที่ใช้และชื่นชอบ FastAPI มาอย่างยาวนาน จึงพัฒนาโปรเจกต์นี้ขึ้นมาด้วยความตั้งใจอยากช่วยนักพัฒนาที่กำลังเริ่มต้นกับ FastAPI
FastAPI-fastkit คือ starter kit แบบ CLI ที่ช่วยให้ผู้ใช้ซึ่งเพิ่งเริ่มต้นกับ Python และ FastAPI สามารถตั้งค่าสภาพแวดล้อมการพัฒนาและสแคฟโฟลด์โปรเจกต์ได้อย่างรวดเร็ว
เพียงพิมพ์คำสั่งง่าย ๆ ก็สามารถสร้างโปรเจกต์ FastAPI พร้อมทั้งสร้าง virtual environment และติดตั้ง dependencies ให้อัตโนมัติครบทั้งหมด
pip install fastapi-fastkit
fastkit init --interactive # กำหนดค่าโปรเจกต์แบบโต้ตอบ (DB ORM, การยืนยันตัวตน, การทดสอบ, ยูทิลิตี และติดตั้ง dependencies อื่น ๆ ตามที่ผู้ใช้ต้องการ)
FastAPI เป็น Python web framework สมัยใหม่ที่ทั้งรวดเร็วและได้รับความนิยมมาก แต่สำหรับผู้ที่เลือก FastAPI เป็นเว็บเฟรมเวิร์กตัวแรก ก็ยังมีอุปสรรคในการเริ่มต้นอยู่เช่นกัน:
- ไม่มีโครงสร้างโปรเจกต์มาตรฐานที่ให้มาแบบชัดเจน จึงไม่แน่ใจว่าควรวางโครงสร้างโปรเจกต์อย่างไร
- จากปัญหาข้อ 1 แม้จะเป็นโปรเจกต์ที่พัฒนาด้วย FastAPI เหมือนกัน แต่แต่ละโปรเจกต์ก็มีโครงสร้างต่างกัน ทำให้ต้องมีต้นทุนการเรียนรู้เมื่อต้องทำความเข้าใจโปรเจกต์หรือมีส่วนร่วมกับโอเพนซอร์ส
- เมื่อเทียบกับเว็บเฟรมเวิร์กอื่น FastAPI พึ่งพาไลบรารีภายนอกสูงมากในส่วนของฟังก์ชันหลักของเว็บเฟรมเวิร์ก เช่น ASGI server และ serializing จึงทำให้การเรียนรู้และประสบการณ์ใช้งาน FastAPI มีความซับซ้อนอยู่พอสมควร (เพราะต้องใส่ใจกับการเรียนรู้ไลบรารีและเครื่องมืออื่นเพิ่มเติมด้วย)
คนที่เคยใช้ Django น่าจะรู้ดีว่า django-admin startproject สะดวกแค่ไหน และใน ecosystem ของ Spring ก็มีเครื่องมือคล้ายกันอย่าง Spring Initializr ที่ช่วยวางโปรเจกต์ลงใน working directory ได้ทันที
โดยส่วนตัวผม/ฉันมองว่า FastAPI เป็นเฟรมเวิร์กที่น่าสนใจมากในด้านประสิทธิภาพ จึงใช้งานมาอย่างต่อเนื่องนานกว่า 5 ปี แต่เพราะข้อเสียที่กล่าวมาข้างต้นทำให้บางคนลังเลที่จะเริ่มต้นใช้งาน จึงคิดว่าน่าจะดีถ้า FastAPI มีเครื่องมือแบบนี้บ้าง และนั่นคือที่มาของ FastAPI-fastkit
แรงผลักดันสำคัญที่ทำให้ตัดสินใจพัฒนาโปรเจกต์นี้ คือช่วงที่มีการเพิ่ม FastAPI CLI package ใน FastAPI เวอร์ชัน 0.111.0 แม้แพ็กเกจดังกล่าวจะถูกเพิ่มเข้ามาโดย tiangolo ผู้พัฒนา FastAPI โดยไม่ได้ตรวจสอบเสียงตอบรับจากชุมชนก่อน แต่ผม/ฉันเห็นด้วยกับ แรงจูงใจที่ระบุไว้ในบันทึกอัปเดตว่าเพื่อลดอุปสรรคในการเริ่มต้นใช้ FastAPI และเชื่อมั่นว่าโปรเจกต์นี้จะยิ่งมีความหมายมากขึ้น
[ฟีเจอร์หลัก]
- ตัวสร้างโปรเจกต์แบบโต้ตอบ (fastkit init --interactive)
เมื่อเลือก dependencies และฟังก์ชันที่ต้องการทีละขั้น ระบบจะสร้างโค้ดให้อัตโนมัติ:
- Database: PostgreSQL, MySQL, MongoDB, Redis, SQLite
- Authentication: JWT, OAuth2, FastAPI-Users, แบบอิง Session
- Background: Celery, Dramatiq
- Caching: Redis, fastapi-cache2
- Monitoring: Loguru, OpenTelemetry, Prometheus
- Testing: ตั้งค่า pytest + coverage อัตโนมัติ
- Utilities: CORS, Rate-Limiting, Pagination, WebSocket
- Deployment: สร้าง Docker, docker-compose อัตโนมัติ
- Package Manager: เลือกได้ระหว่าง pip, uv, pdm, poetry
- นอกจากนี้ยังสามารถเพิ่ม dependencies อื่น ๆ ตามที่ผู้ใช้ต้องการได้
- วางซอร์สโค้ดโปรเจกต์ FastAPI ได้อย่างรวดเร็วด้วย boilerplate
หากการตั้งค่าแบบโต้ตอบดูยุ่งยาก ก็สามารถเริ่มต้นได้ทันทีด้วยเทมเพลตที่เตรียมไว้ล่วงหน้า:
fastkit list-templates # ตรวจสอบรายการเทมเพลตที่ใช้งานได้
fastkit startdemo fastapi-psql-orm --project-name myapp # สร้างโปรเจกต์ด้วยเทมเพลตที่กำหนด
เทมเพลตที่มีให้ภายในแพ็กเกจถูกเพิ่มเข้ามาโดยคำนึงถึง use case ที่หลากหลายของ FastAPI และอ้างอิงจากโครงสร้างของโปรเจกต์ที่พัฒนาด้วย FastAPI ซึ่งเปิดเป็นสาธารณะบน GitHub
ขณะนี้กำลังเพิ่มเทมเพลตใหม่ ๆ อย่างต่อเนื่อง และเทมเพลตที่มีให้ในตอนนี้ได้แก่:
- fastapi-default: โครงสร้างโปรเจกต์ FastAPI พื้นฐาน
- fastapi-async-crud: เหมาะสำหรับงาน CRUD แบบ asynchronous
- fastapi-dockerized: พร้อมสำหรับ deploy ด้วย Docker
- fastapi-psql-orm: รวม PostgreSQL + SQLAlchemy ORM
- fastapi-single-module: โครงสร้างแบบ single module ที่เรียบง่าย
- fastapi-mcp: โครงสร้างโปรเจกต์ FastAPI พื้นฐานสำหรับพัฒนา MCP server
- เริ่มต้นด้วยโปรเจกต์ว่างเปล่า
หากต้องการเริ่มด้วยโปรเจกต์ว่างที่สะอาดโดยไม่ต้องตั้งค่าพิเศษ: fastkit init --project-name myproject
- เพิ่ม route
เพิ่ม API route ใหม่ให้กับโปรเจกต์ที่มีอยู่: fastkit addroute myproject users # เพิ่ม API route ชื่อ users ให้กับโปรเจกต์ myproject
- รัน development server
สามารถรันเซิร์ฟเวอร์ได้ทันทีโดยไม่ต้องใช้คำสั่ง uvicorn แยกต่างหาก: fastkit runserver --reload --port 8000
[เอกสารและทรัพยากร]
สามารถดูวิธีใช้งานโดยละเอียดเพิ่มเติมได้จากเอกสารอย่างเป็นทางการ:
- คู่มือผู้ใช้: https://bnbong.github.io/FastAPI-fastkit/user-guide/quick-start/
- บทช่วยสอน: https://bnbong.github.io/FastAPI-fastkit/tutorial/getting-started/
- CLI reference: https://bnbong.github.io/FastAPI-fastkit/user-guide/cli-reference/
- GitHub Repository: https://github.com/bnbong/FastAPI-fastkit
- PyPI Package: https://pypi.org/project/fastapi-fastkit
หวังว่าจะช่วยผู้ที่เพิ่งเริ่มต้นกับ FastAPI และ Python ได้ไม่มากก็น้อย
ยินดีต้อนรับทุก feedback, คำถาม และการมีส่วนร่วม!
1 ความคิดเห็น
กำลังพิจารณา fastapi สำหรับโปรเจกต์ใหม่อยู่ครับ
มีทุกประเด็นที่ผมกำลังค่อย ๆ คิดและตรวจสอบอยู่รวมไว้ครบเลย
ยอดเยี่ยมมาก ขอบคุณครับ