วิธีการดึงข้อมูล API ด้วยการใช้ axios
ต้องบอกว่า axios เป็น HTTP Client Library ตัวนึงที่คนนิยมใช้งานมากๆ เผลอๆ จะมากกว่า Fetch API ที่เป็น global module ของ Browser ซะอีก (รวมถึงฝั่ง Node.js ที่เพิ่งจะ built-in support ใน v18.0) วันนี้เลยมาเขียนบทความการใช้งาน axios ในแบบคร่าวๆ ไว้ครับ จริงๆ เรียกว่าสรุปและอ่านจาก Docs มากกว่า 🤣
Axios คืออะไร?
axios เป็น Promise based HTTP Client Library เพื่อทำการดึงข้อมูล ส่งข้อมูล และเชื่อมต่อกับ API โดยสามารถใช้งานได้ทั้งผ่าน Browser และ Node.js ซึ่ง Features หลักๆ ที่น่าสนใจของ axios คือ:
- รองรับ Promise API
- การแปลงข้อมูล
reauest
และresponse
- รองรับการ cancel request
- ทำ Intercept headers ได้
- ป้องกัน XSRF
- รองรับ TypeScript (จริงๆ ต้องบอกว่าเป็นมาตรฐานไปแล้ว Library ไหนไม่รองรับน่าจะแปลกกว่า)
Browser Support
Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | 11 ✔ |
การติดตั้ง
เราสามารถใช้งาน axios ได้ทั้งผ่าน Browser หรือ Node.js ก็ได้
ติดตั้งด้วย NPM หรือ Yarn:
หรือถ้าใช้งานผ่าน Browser ก็แทรกไปใน HTML ผ่าน CDN ได้เลย
ตัวอย่างการใช้งาน
ถ้าเราใช้งานแบบ CommonJS เวลา import ด้วย require()
เราจะใช้แบบด้านล่างนี้ เพื่อให้ Editor มันสามารถที่จะ support Autocomplete / Intellisense
แบบ ES Module
GET Request
ตัวอย่างการใช้ GET
ใช้งาน GET แบบส่ง Params
ซึ่งจะมีค่าเท่ากับแบบนี้ (เอา query params ออกจาก URL แล้วใช้ options
ส่งเป็น args ไปใน axios.get()
)
async/await
เราสามารถที่จะใช้การเขียนแบบ async/await ได้ เช่นกัน
POST Request แบบ JSON
การส่ง POST Request แบบ JSON ใช้ การส่ง payload
เป็น args ตัวที่ 2 แบบนี้
โดยที่ default ตัว payload จะเป็น JSON และก็ Content-Type
จะเป็น application/json
POST Request แบบ application/x-www-form-urlencoded
เราสามารถส่ง POST Request แบบ application/x-www-form-urlencoded
ได้นอกเหนือจาก JSON โดยการใช้ URLSearchParams (ตัวนี้ไม่ได้รองรับทุก Browser นะ)
POST Request แบบ multipart/form-data
การส่งแบบ multipart/form-data
เราจะใช้ FormData ใน Browser เราสามารถเรียกใช้ FormData API ได้ ส่วนถ้าเป็น Node.js ต้องใช้ Library เพิ่มเติม เช่น form-data
ถ้าเป็น Node.js จะใช้ form-data
library
Auto Serialization to FormData
ตัว Axios ก็ยังรองรับการ Serialize JSON เป็น FormData
ให้อัตโนมัติ ถ้า Content-Type
เป็น multipart/form-data
เช่น
Method ของ Axios
นอกจากนี้ ตัว axios ยังรองรับ HTTP Method เป็นชื่อเดียวกับ function เลย ตัวอย่าง
การ Custom Instance
เราสามารถ custom instance เพื่อกำหนดค่า config เองได้ เช่น กำหนด headers
หรือกำหนด baseURL
หรือ timeout
เป็นต้น
ตัวอย่างการ set token กรณีมีต้อง require token ในบาง Request แบบคร่าวๆ
การจัดการ Error
ตัว Error ที่ server ตอบกลับมาจะเข้า catch()
กรณีที่ไม่ใช่ HTTP 2xx โดยเราจะได้ response อยู่ในรูปแบบ error.response
ตัวอย่างเช่น
หรือเราสามารถ ใช้ toJSON
เพื่อจัดการข้อมูลของ HTTP error ได้
การ Cancel Request
เป็น feature ที่ค่อนข้างมีประโยชน์ กรณีที่เราทำการเรียก request ไปแล้ว และอยากยกเลิกมัน ก็สามารถทำได้ผ่านตัว AbortController
Credentials
Request ที่ยุ่งกับ cookies และ cross-site Access-Control
เราสามารถใช้ withCredentials
ได้ ตัวอย่าง
ทั้งหมดนี้ก็เป็นการใช้งาน axios แบบคร่าวๆ ซึ่งจริงๆ ก็ไม่มีอะไรมาก การ custom อื่นๆ หรือการประยุกต์ใช้งานในรายละเอียดอื่นๆ สามารถอ่านเพิ่มเติมได้ที่ Docs ของ axios ได้เลยครับ
Happy Coding ❤️
- Authors
-
Chai Phonbopit
เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust