Mock Server ด้วย Postman
Mock Server คืออะไร
การ Mock จะเป็นการสร้างผลลัพธ์ที่เราอยากได้ ซึ่งการเป็น mock จะทำงานแบบ Static คือ เป็นตัวปลอมที่ไม่สามารถจำลองการทำงานจริงของระบบได้ จะมี ผลลัพธ์ที่ Return กลับไปเหมือนเดิมทุกครั้ง ดังนั้นสิ่งที่เราต้องการจาก mock คือการได้ output ที่เราต้องการเมื่อเรา input ถูกต้อง แต่ถ้าเรา input เข้าไปไม่ถูกต้อง server ก็จะ throw exception ออกมา
Mocks are pre-programmed with expectations which form a specification of the calls they are expected to receive. They can throw an exception if they receive a call they don’t expect and are checked during verification to ensure they got all the calls they were expecting.
– Martin Fowler –
ตามความหมายที่ Martin Fowler ได้ให้ไว้ keyword ที่สำคัญคือ expectations ซึ่งบ่งบอกถึงการทำงานของ Mock ได้เป็นอย่างดี โดย Mock จะต้องกำหนด request และ response ที่แน่นอน(ถ้าส่ง request แบบนี้จะ response กลับไปยังไงดี) และถ้าส่ง request มาไม่ตรงกับที่คาดการณ์ไว้ก็จะ throw error กลับไป หรือใน postman เราสามารถส่ง header เข้ามาได้ว่าเราต้องการ response ที่เป็น error รหัสอะไร
จุดประสงค์ของการ Mock คือการจำลอง Service ขึ้นมาโดยอาจเป็น service ที่เราจะพัฒนาในลำดับต่อไป หรืออาจเป็น service ที่มีอยู่แล้วแต่ยังไม่อยากเข้าไปเชื่อมต่อตอนนี้
การ Mock Server ใน Postman
ใน Postman จะมี Feature ที่ช่วยให้เราสามารถ Mock Server ได้โดยที่คุณต้องสมัคร Free Account ใน Website ของ postman หลังจากนั้นเมื่อเรา Login ใน Postman เราจะสามารถเข้าไปสร้าง Mock Server ได้
ข้อควรระวังคือ Free Account จะตั้ง Server ของเราเป็น Public เพราะฉะนั้นเราอย่าใส่ข้อมูลของจริง(Sensitive Data) ลงไปในนี้ เพราะใครๆก็สามารถเข้าถึง Mock Server ของเราได้
สมัคร Free Account ของ Postman ได้ตาม Link นี้ https://www.postman.com
วิธีการตั้ง Mock Server
- เลือก create new mock server
- เลือกสร้าง collection ใหม่หรือนำข้อมูลใน collection ที่มีอยู่แล้วมาสร้างเป็น Mock server
- ตั้งชื่อให้กับ Mock server
- เลือกให้ตัวแปร Base URL ของ Mock Server ไปเก็บอยู่ใน Environment ไหน โดย default postman จะทำการสร้าง environment ขึ้นมาใหม่ และจะใช้ชื่อเดียวกับ Mock Server ที่เราตั้งไว้ในขั้นตอนก่อนหน้านี้
- เลือกว่าจะให้มัน simulate network ให้มันช้าเหมือนของจริงรึเปล่า(เรื่องการทำงานช้าน่าจะ test หลังจากนี้มากกว่า)
- กำหนด response ที่จะ return กลับไป(เราอยากให้ return แบบไหนใส่ได้เลย) โดยที่เริ่มต้นจะมี Default response มาให้แค่ตัวเดียว
- หลังจากนี้สามารถกด Add request หรือ response ที่ต้องการได้เลย
หลักการ Match URL
postman จะทำการ reponse กลับไปโดยเลือกจาก URL ที่มีความใกล้เคียงที่สุด หลักการคิดของ postman คือ
- ถ้าตรงกันแบบเป๊ะๆ จะเลือก response ของ request นั้นเลย
- ถ้าไม่มี URL ไหนตรงเลยมันจะพยายามตัด / และ ตัวเลขท้ายออก เช่นถ้าเราไม่มี request ของ /customer/3 postman จะไปหา /customer แทน
อยากให้ Mock Server return error
- เพิ่ม response ของ error โดยเลือก return http status code ที่ต้องการ เช่น
http status code | description |
---|---|
404 | Not Found (ไม่มี resource นี้อยู่) |
405 | Method not allow (ห้ามใช้ http method นี้) |
401 | Unauthorize (Authen ไม่ผ่าน) |
403 | Forbidden (ไม่ผ่าน Authorization) |
- ตอนส่ง request ให้ใส่ header เพิ่มเข้าไปว่า
x-mock-response-code: 404
ผลลัพธ์ที่ได้ก็จะเป็นไปตาม Request URL และ http status code