สร้าง RESTful API แบบ happy ด้วย Hapi.js #2 Routing
ต่อกันจากตอนที่แล้ว เราได้สร้าง และรัน server ขึ้นมาพร้อมกับ ลองสร้าง route แบบง่ายๆ กันมาแล้ว
ทีนี้เราจะมาลงลึกกันในส่วนของ Routing กันอีกนิด ซึ่งหลายๆ คนก็อาจมีคำถามในใจอยู่แล้วอย่างถ้าหากต้องการเข้าถึง parameter, query หรือ payload จะทำอย่างไร?
สำหรับใครที่ถึงจะหลงเข้ามาอ่าน และไม่ยังเคยลองใช้ Hapi มาก่อนแนะนำให้อ่าน ตอนแรกกันก่อนนะ
เมื่อพร้อมแล้วก็มาเริ่มกันเลย
Routing
คือการกำหนดเส้นทางที่จะชี้ไปยังขั้นตอน วิธีการ หรือทรัพยากรต่างๆ ให้กับ server ของเรา ซึ่งในตอนที่แล้วเราทราบกันแล้วว่าเมื่อเรียก method server.route()
จะเป็นการกำหนด route โดยการส่ง method, path และ handler เข้าไป
เพียงเท่านี้ก็จะเป็นการกำหนด route แบบง่ายๆขึ้นมาแล้ว ที่นี้เรามาดูกันว่าในส่วนของ method, path และ handler จะสามารทำอะไรได้บ้าง
Method
ส่วนที่กำหนดวิธีการ request ของ http method ที่เรารู้จักกันดี แต่ในกรณีที่เราต้องการจะเรียก route นี้ด้วย method ที่ต่างกัน Hapi ก็อนุญาตให้เรากำหนดเป็นอาเรย์ได้ด้วย โดยเราไม่จำเป็นต้องไปสร้าง route เพิ่ม
Path
เส้นทางที่เราจะใช้เรียก route ซึ่งเราสามารถที่จะเพิ่ม parameter ลงไปด้วยการใส่ชื่อ parameter ใน {}
และ เข้าถึง parameter นั้นได้จาก request object
Optional parameter
จากตัวอย่างด้านบนเราจำเป็นต้องส่ง parameter ไปด้วยเสมอ หากเราเรียกเป็น /user
เพียงอย่างเดียว server ก็จะ กรนด่ากลับมาว่า 404 Not found นะจ๊ะ แต่ถ้าเราอยากให้ API ของเราเรียกแบบ ไม่มี parameter ได้ด้วยละ เราก็เพียงแค่เพิ่ม ?
ต่อท้าย parameter ที่เราต้องการทำเป็น optional นั้นเอง
Default path
เราสามารถกำหนด default path ให้กับ server ได้ในกรณีที่ request ที่เข้ามาไม่ตรงกับ path ใดเลย ด้วยการกำหนด method และ path เป็น *
ตัวอย่างนี้เราได้กำหนด path /hello
และ default path เอาไว้ ในกรณีที่มีการ request เข้ามา เช่น /user/chiibi
ซึ่งไม่ได้กำหนดเอาไว้ ก็จะไปเรียกใน default path แทน
Hapi จะหา path ที่กำหนดเอาไว้ก่อน default path เสมอดังนั้นไม่ต้องกังวลเรื่องลำดับของการกำหนด route ก่อนหรือหลัง
Handler
ในส่วนนี้จะเป็นตัวกำหนดวิธี หรือขั้นตอนในการทำงานให้กับแต่ละ route โดยจะรับ parameter สองตัวเข้ามา
request
เป็น object และ ข้อมูลของ request ที่เรียกเข้ามา เช่น path, header, payload หรือ parameter ที่เราเคยลองใช้กันไปแล้ว (ดูเพิ่มเติมได้ที่ Hapi API reference)
h
เป็น object ที่เก็บ method ต่างๆสำหรับการปรับแต่ง response ของเราที่ส่งกลับไปให้ client อย่างเช่น http status code (ดูเพิ่มเติมได้ที่ Hapi API reference)
Handler จำเป็นต้อง return value, promise หรือ throw error ด้วยทุกครั้ง
ในส่วนของ Routing นี้จริงๆยังมี configuration options ที่จะช่วยให้เราเพิ่มลูกเล่น และปรับแต่ง route ของเราเช่น validation, auth, cache และอื่นๆ อีกมาก ใครสนใจก็ลองเข้าไปดูได้ที่ Route option API
สุดท้ายนี้เองก็ต้องบอกว่าตัวผมเองก็ยังไม่ได้ลองเล่นอีกหลายๆอย่าง และก็ลองผิดลองถูกอยู่บ้างหากมีข้อผิดพลาดตรงไหนก็ยินดีรับคำแนะนำ ติชมตลอด ไว้ถ้าหากมีโอกาสหยิบมาเล่น ดีร้ายยังไงก็จะเอามาเล่าให้ฟังกันอีกทีนะครับ