สร้าง RESTful API แบบ happy ด้วย Hapi.js #2 Routing

Chayapol Chaimongkolnimit
Nextzy
Published in
3 min readApr 23, 2020

ต่อกันจากตอนที่แล้ว เราได้สร้าง และรัน 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)

ลองเข้าถึง payload ใน request object

h เป็น object ที่เก็บ method ต่างๆสำหรับการปรับแต่ง response ของเราที่ส่งกลับไปให้ client อย่างเช่น http status code (ดูเพิ่มเติมได้ที่ Hapi API reference)

กำหนด status code เป็น 500
ได้ response เป็น hello แต่กำหนด status เป็น 500 Error

Handler จำเป็นต้อง return value, promise หรือ throw error ด้วยทุกครั้ง

ในส่วนของ Routing นี้จริงๆยังมี configuration options ที่จะช่วยให้เราเพิ่มลูกเล่น และปรับแต่ง route ของเราเช่น validation, auth, cache และอื่นๆ อีกมาก ใครสนใจก็ลองเข้าไปดูได้ที่ Route option API

สุดท้ายนี้เองก็ต้องบอกว่าตัวผมเองก็ยังไม่ได้ลองเล่นอีกหลายๆอย่าง และก็ลองผิดลองถูกอยู่บ้างหากมีข้อผิดพลาดตรงไหนก็ยินดีรับคำแนะนำ ติชมตลอด ไว้ถ้าหากมีโอกาสหยิบมาเล่น ดีร้ายยังไงก็จะเอามาเล่าให้ฟังกันอีกทีนะครับ

Reference

--

--