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

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น