- ลองไล่ stack trace ด้วย Pycham ดูสักครั้งก็น่าทำมาก
- สามารถตรวจสอบได้ว่าตัวแปรที่ถูกใช้งานมีค่าอะไร และถ้าเป็นอินสแตนซ์ก็สามารถดูได้ว่ามี attr อะไรบ้าง
- ดูเหมือนว่า FastAPI จะไม่สามารถมีอยู่ได้หากไม่มี Starlette
- แม้แต่คลาสพื้นฐานก็ถูกสร้างขึ้นโดยสืบทอดจาก Starlette และ Request, Response, Router, Middleware ฯลฯ ก็ล้วนสร้างโดยมี Starlette เป็นฐาน
- คุณจะได้อ่านโค้ดของ starlette มากกว่าโค้ดของ FastAPI
- ทำให้คิดได้ว่า อาจจะลองถอด FastAPI ออกแล้วสร้างแอปด้วย Starlette โดยตรงก็ได้
- บทบาทของ Uvicorn ↔ Starlette ↔ FastAPI รู้สึกชัดเจนขึ้นมาก
- Uvicorn: อินเทอร์เฟซการสื่อสารกับภายนอก
- Starlette: อินเทอร์เฟซการทำงานภายในเซิร์ฟเวอร์
- FastAPI: เพิ่มความสะดวกในการเขียน endpoint func บน Starlette (เช่น
Depends(), การตรวจสอบ Param ผ่าน Pydantic เป็นต้น) แล้วโต้ตอบกับ Uvicorn
- เข้าใจเรื่องมิดเดิลแวร์มากขึ้นอีกหน่อย
- จะเห็นได้ว่าการประมวลผล Request ดำเนินไปในลำดับ ServerErrorMiddleware → คัสตอมมิดเดิลแวร์ต่าง ๆ → ExceptionMiddleware
- handler ที่ติดไว้ด้วย
@app.exception_handler(Exception) จะถูกจัดการใน ExceptionMiddleware และ server error อื่น ๆ จะถูกจัดการใน ServerErrorMiddleware
- มีการรันกลุ่มเธรดแยกต่างหากอีกครั้งเพื่อป้องกันการบล็อกของมิดเดิลแวร์
ยังไม่มีความคิดเห็น