โปรเจค fastapiExper นี้เป็นโปรเจคทดลองเกี่ยวกับ การสร้าง Backend (Web API) เขียนด้วยภาษา Python ร่วมกับการใช้ FastAPI Library เป็นหลัก โปรเจคนี้ทำขึ้นเพื่อศึกษาและวางโครงสร้าง วางแผนการพัฒนาเป็นโปรเจคอื่นต่อไป
.
├── README.md -- ไฟล์ README.md ที่ผู้อ่านเปิดอยู่
├── app -- โฟลเดอร์เก็บ sourcecode หลักของทั้งโปรเจค
│ ├── api -- โฟลเดอร์ที่เกี่ยวข้องกับส่วนที่ทำหน้าที่ API ทั้งหมด
│ │ ├── dependencies -- โฟลเดอร์เก็บ FastAPI Dependencies
│ │ ├── endpoints -- โฟลเดอร์เก็บ Endpoints หรือ Router ที่นำทาง URL ไปยัง Method ที่ระบุ
│ │ └── middleware -- โฟลเดอร์เก็บ FastAPI Middleware
│ ├── config.py -- ไฟล์ที่แปล Environment Variable และรวบรวม Configuration ออกมาเป็น Python Constant
│ ├── helper -- โฟลเดอร์รวบรวม Utility และ Helper ต่างๆ ที่ใช้ร่วมกันได้หลายที่ภายในโปรเจค
│ ├── model -- โฟลเดอร์ของ Class ตัวแทน Table เพื่อติดต่อกับ Database โดยใช้ SQLAlchemy ORM
│ ├── crud -- โฟลเดอร์ที่เก็บ Query ที่ติดต่อกับ Database (อาจรวมถึง Business Logic)
│ ├── schema -- โฟลเดอร์เก็บ Pydantic ซึ่งคือ Class ที่ใช้ Validate ข้อมูลขาเข้าและออกจาก Endpoint
│ └── ext_service -- โฟลเดอร์เก็บ Service ที่ติดต่อกับ Service/API ภายนอก (ส่วนใหญ่ใช้ช่องทาง HTTP Request)
├── main.py -- จุดเริ่มต้น Run โปรเจค
├── pytest.ini -- Configuration ที่เกี่ยวข้องกับ Unit Test
├── requirements.txt -- ไฟล์เก็บ pip Package
├── requirements_dep.txt -- ไฟล์ pip Package Dependency โดยได้จากคำสั่ง pipdeptree
└── test -- โฟลเดอร์เก็บ Unit Test ภายในโปรเจค
└── fixture -- โฟลเดอร์เก็บ Fixture ของ Unit Test
└── db.py -- ไฟล์ Fixture ซึ่งสร้าง Database เพื่อใช้สำหรับ Run หรือ Debug Unit Test
การเปิดโปรเจคนั้นสามารถทำได้สองวิธีคือ
- ใช้ VSCode DevContainer
- ใช้ Python Virtual Environment
หากเครื่องผู้อ่านมี Docker, VSCode และ Remote Development ติดตั้งอยู่แล้วก็สามารถเปิดโปรเจคได้โดยไม่ต้องทำอะไรเพิ่มเติม ก็สามารถ Run / Run Test หรือ Debug Test ได้ทันทีโดย ctrl+shift+p และพิมพ์ภายในกล่อง Quick Open ให้พิมพ์ Reopen Folder in Container จากนั้นเลือก Remote-Containers: Reopen Folder in Container
-
สร้าง Virtual Environment ภายในโฟลเดอร์เดียวกับไฟล์ README นี้ โดยใช้คำสั่ง
> virtualenv env
-
หากผู้อ่านใช้ Powershell ให้ Activate Virtual Environment โดยใช้คำสั่ง
> .\env\Scripts\activate
แต่ถ้าหากผู้อ่านไม่ได้ใช้ Powershell ให้ Activate Virtual Environment ตามขั้นตอนนี้
- ใน VSCode ให้ชี้ Python Environment ไปยังที่ Virtual Environment ที่สร้างขึ้นมา
ผู้อ่านสามารถใช้ประโยชน์จากไฟล์ ./vscode/launch.json
ในการฝัง Environment Variable ภายใน Attribute "env" ตามตัวอย่าง CONNECTION_STRING
และสำหรับการทำ Configuration เพื่อทำ Unit Test นั้น ให้ใส่ไว้ภายในไฟล์ pytest.ini ตามตัวอย่าง CONNECTION_STRING
ผู้เขียนมีแนวทางโดยคร่าวประมาณสามแนวทางคือ
- ใช้ .env.* (แต่ไม่ include ไฟล์เหล่านี้ลงไปใน Source Control Repository)
- ใช้ Shell Script เพื่อ Set ค่า Environment Variable ภายใน OS (ไม่ include ไฟล์เหล่านี้ลงใน Source Control Repository เช่นกัน)
- ใช้ Configuration ใน Container / Orchestration Tool
- Roles in FastAPI is called scopes
ในหัวข้อถัดๆ ไปให้ผู้เขียนบันทึกรายละเอียดทางการพัฒนา และ Implement โปรเจคของผู้อ่านต่อไป