วันเสาร์ที่ 14 กรกฎาคม พ.ศ. 2561

ASP.NET WEB API 2 Pipeline

      สวัสดีครับวันจะมะแชร์ ทฤษฎีหลักการทำงานของ ASP.NET Web API กันครับ ซึ่งในโพสน์นี้จะไม่มีการเขียน Code แต่จะเน้นทฤษฎีเพื่อให้เข้าใจหลักการคร่าวๆ ก่อนไปเขียน Code ASP.NET Web API ได้อย่างถูกต้องครับ งั้นมาเริ่มกันเลยครับ

      แล้ว ASP.NET Web API คืออะไร?
      ASP.NET Web API คือ Framework ที่ช่วยให้เราสร้าง HTTP Service ง่ายขึ้น จนสามารถเข้าถึงผู้ใช้งานได้มากขึ้นโดยรองรับหลากหลาย Browser และ หลากหลาย Mobile ได้มากขึ้น เนื่องจากรองรับแบบ RESTful (RESTful คือ รูปแบบการเรียก HTTP Service อย่างหนึ่งที่สามารถใช้ได้กับหลากหลาย Platform) บน .NET Framework

      หลักการทำงานของ ASP.NET Web API
      ในการทำงาน ของ Web API 2 นั้นจะมีการทำงานตามหัวข้อใหญ่ๆดังนี้
      - Host                           คือ สถานที่เว็บ Service ของเราได้ทำการไว้เช่น IIS                           
      - Message Handlers     คือ เป็นตัวตรวจสอบข้อมูลชั้นแรกก่อนเข้าไปที่ Controller
      - Controller                  คือ ตัว Controller ที่สามารถตรวจสอบข้อมูลที่รับมาว่าถูก Format หรือไม่เช่น ค่า API Key ถูกต้องและเป็นตัวเก็บ Action Method
      - Model Biding            คือ การแปลงข้อมูลที่รับมาจากผู้ใช้ให้เป็นตัวแปร Object แล้วส่งให้ Action Filers
      - Action Filter             คือ  ส่วนทำการตรวจสอบข้อมูลที่รับเข้ามาอีกรอบหนึ่งว่าถูกหรือไม่ เช่น ข้อมูลต้องเป็นตัวเลข, ต้องมีค่าไม่เกิน 10 เป็นต้น ก่อนที่จะส่งข้อมูลให้ Action Method
      - Action Method          คือ ส่วนประมวลผลข้อมูล
      - Result Conversion     คือ การแปลงข้อมูลให้อยู่ในรูปแบบที่ตกลงกันไว้เช่น JSON, XML, BSON


รูปภาพแสดงหลักการทำงานของ ASP.NET Web API คร่าวๆ


      จากรูปจะเห็นการทำงานเป็นลำดับคือ 
- เมื่อ Host มีการ Request เข้ามา Message Handler จะทำการตรวจสอบเป็นครั้งแรกก่อนว่าข้อมูลที่เข้ามานั้นตรงตาม Format ที่กำหนดหรือไม่ เช่น Header มี Authentication หรือไม่, รูปแบบการ Authentication ถูกต้องหรือเปล่า เป็นต้น 
- ถ้าตรวจสอบถูกต้องจึงจะเข้าไปที่ Controller (ถ้าไม่ถูกให้ response Status Code Error กลับไปให้ผู้ใช้งาน) หลังจากนั้น Controller ก็จะส่งข้อมูลที่ได้ให้ Modelฺ Binding เพื่อทำการแปลงข้อมูลที่รับจากผู้ใช้งานให้เป็นตัวแปรที่สามารถใช้งานได้
-แล้วทำการให้ Action Filter เพื่อทำการตรวจสอบค่าของข้อมูลว่าเป็นไปตามที่กำหนดหรือไม่
-เมื่อตรวจสอบผ่านจึงส่งไปให้ Action Method ทำการประมวล
-แล้วส่งข้อมูลที่ประมวลผลเสร็จแล้วไปให้ Action Filter อีกที 
-แล้วค่อย Result Conversion เพื่อทำการแปลงข้อมูลที่คำนวณได้เป็นรูปแบบที่ผู้ใช้ต้องการเช่น JSON, XML, BSON 


จากหลักการทำงานตามลำดับดังกล่าวมา แต่ละส่วนก็จะมีการทำงานย่อยลงไปซึ่งผมจะแตกการทำงานย่อยแบ่งเป็น 2 ส่วนใหญ่คือ
1. ส่วน Message Handler (บางที่อาจจะเรียกว่า Delegating Handler)
2. ส่วน Controller ไปถึง Method Action

1. ส่วน Message Handler (บางที่อาจจะเรียกว่า Delegating Handler)
   เป็นส่วนของการตรวจสอบข้อมูลชั้นแรกก่อนส่งไปยัง Controller ซึ่งมีการทำงานย่อยลงไปดังรูป
ด้านล่าง
- HTTP Request Message คือ ข้อมูลรับจาก Host
- Message Handler คือ ตัวตรวจสอบข้อมูลที่ใช้ในการขอว่า รูปแบบข้อมูลถูกต้องหรือไม่
- Routing Dispatcher คือ ตัวจัดการรูปแบบของเส้นทางที่จะไปเรียก Web Service
- Controller Dispatcher คือ ตัวจัดการเส้นทางว่าควรใช้ Controller ตัวใหน
- HTTP Response Message คือ ข้อมูลที่จะส่งผ่าน HTTP ให้ Host



รูปภาพการทำงานภายในของ Message Handler


2. ส่วน Controller ไปถึง Method Action
    เป็นส่วนของการแปลงและตรวจสอบข้อมูลภายในเพื่อนำเอาข้อมูลที่ได้ไปประมวลผลดังรูปด้านล่าง
    - Controller คือ ตัวเก็บ Action Method
    - Authentication Filter คือ การตรวจสอบว่าใครเป็นคนขอข้อมูล
    - Authorization  Filter คือ การตรวจสอบสิทธิ์การการเรียกใช้งาน
    - Model Binding คือ การแปลงข้อมูลที่รับมาจากผู้ใช้ให้เป็นตัวแปร Object แล้วส่งให้ Action Filers
    - Action Filter และ Action Invoke คือ ส่วนทำการตรวจสอบข้อมูลที่รับเข้ามาอีกรอบหนึ่งว่าถูกหรือไม่ เช่น ข้อมูลต้องเป็นตัวเลข, ต้องมีค่าไม่เกิน 10 เป็นต้น 
    - Action Method คือ ส่วนประมวลผลข้อมูล
    - Exception Filter คือ ตัวตรวจสอบ Error ว่าถ้าเกิด Error ขึ้นเแล้วเป็น Error ประเภทใหน


รูปภาบการทำงานภายในส่วนช่วง Controller ถึง Action Method


 

ถ้าต้องการทราบการทำงานอย่างละเอียดสามารถเข้าไปดูได้ที่รูปด้านล่างหรือลิงค์ดังนี้ครับ https://channel9.msdn.com/Events/TechEd/Europe/2014/DEV-B410





Referrence
- https://www.slideshare.net/rjovic/aspnet-webapi-going-deep-into-the-pipeline
https://www.asp.net/media/4071077/aspnet-web-api-poster.pdf
https://channel9.msdn.com/Events/TechEd/Europe/2014/DEV-B410

ไม่มีความคิดเห็น:

แสดงความคิดเห็น