Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

แนะนำ WireMock และ Stubby4J สำหรับการจำลอง REST APIs

$
0
0

SystemUnderTest

SystemUnderTest จากการพูดคุยกับหลายทีม พบว่า ปัญหาอย่างหนึ่งที่มักพบเจอคือ การเชื่อมต่อกับระบบต่าง ๆ ผ่าน REST APIs หรือแม้แต่การพัฒนาระบบเดียวกันที่ต้องแบ่งเป็น 2 ทีม คือ
  1. ทีม Frontend อาจจะเป็น Web หรือ Mobile ก็ได้
  2. ทีม Backend หรือ ทีม API
เนื่องจากต้องทำการเชื่อมต่อ และ integrate กันตลอด ถ้า API ยังพัฒนาไม่เสร็จล่ะ ? ถ้าระบบ network มันล่มล่ะ ? ถ้าระบบ API มันล่มล่ะ ? คำถามคือ จะแก้ไขปัญหาเหล่านี้อย่างไรดี ?

ก่อนที่จะไปหาเครื่องมือมาช่วยเหลือ ต้องเริ่มจากการคิด และ คุยรายละเอียด

ว่าในแต่ละ API เป็นอย่างไร เช่น
  • Endpoint ของ API
  • Input ของ API เป็น GET/POST/PUT/DELETE
  • Output ของ API
  • รูปแบบข้อมูลเป็น XML หรือ JSON
ซึ่งเป็นข้อตกลงร่วมกันก่อนเริ่มทำงาน จากนั้นเราสามารถใช้เครื่องมือต่าง ๆ มาจำลองการทำงานของ API ได้เลย ระหว่างที่รอให้ API พัฒนาเสร็จ ที่สำคัญทีมพัฒนาสามารถควบคุมข้อมูลได้อีกด้วย ดังนั้น ทีมพัฒนาจะไม่มีข้ออ้างว่า API ไม่เสร็จอีกต่อไป ซึ่งมีเครื่องมือมากมาย โดยที่ผมมักจะใช้งานมี 2 ตัวคือ
  1. WireMock
  2. Stubby4j
แสดงการทำงานดังรูป wiremock2 มาดูตัวอย่างการใช้งาน WireMock กันนิดหน่อย

1. ทำการติดตั้ง

เพียงแค่ download และนำมาติดตั้งไปที่ Servlet Container หรือ run แบบ Standalone ก็ได้ โดยผมจะใช้การ run แบบ Standalone เพื่อความง่าย ให้ทำการ download ไฟล์ JAR จาก WireMock Standalone จากนั้นทำการ run ด้วยคำสั่ง [code]$java -jar wiremock-1.57-standalone.jar --verbose[/code] แสดงผลการทำงานดังรูป wiremock-03 โดยค่า default นั้นจะทำงานที่ port 8080 แต่เราสามารถเปลี่ยน port ได้ด้วยคำสั่ง [code]$java -jar wiremock-1.57-standalone.jar --port 9090 --verbose[/code] สามารถดูการใช้งานเพิ่มเติมได้ที่ Running standalone เมื่อ run WireMock เรียบร้อยแล้วจะสร้าง folder ขึ้นมา 2 folder คือ
  1. __files
  2. mappings

2. การใช้งานส่วนของ Admin

เข้าไปที่ url http://localhost:8080/__admin/ เพื่อดูว่า mapping ต่าง ๆ ของ API ใน WireMock มีอะไรบ้าง แน่นอนว่า ตอนเริ่มต้นต้องไม่มีอะไรเลย แสดงดังรูป wiremock-04

3. มาสร้าง Mock API กันดีกว่า

ความต้องการของผมคือ สร้าง API สำหรับการคงข้อมูลสินค้า ดังนี้
  • Endpoint = /products
  • ใช้งานผ่าน HTTP GET
  • Response ที่ส่งกลับมาอยู่ในรูปแบบของ JSON ซึ่งประกอบไปด้วย id, name, price ของสินค้า
ดังนั้นให้ทำการสร้างไฟล์ชื่อว่า product.json ใน folder mappings ดังนี้ [gist id="e71de6c7f1dada28a15701b76360ff1f" file="product.json"] จากนั้นทำการ restart WireMock แล้วเข้าไปในส่วนของ Admin จะแสดงดังนี้ wiremock-05

4. ใช้งานจริง ๆ กันดีกว่า

สามารถเข้าใช้งานผ่าน URL http://localhost:8080/products แสดงผลการทำงานดังนี้ wiremock-06 หรือสามารถทดสอบผ่าน Postman หรือ REST Client หรือ Curl ก็ได้นะ เลือกได้ตามความสะดวกของแต่ละคน เพียงเท่านี้ก็สามารถจำลอง API Server ด้วย WireMock กันได้แล้วนะ

ส่วน Stubby4J ก็ทำการติดตั้งและใช้งานคล้าย ๆ กัน

ต่างกันเพียงรูปแบบของไฟล์ configuration และ รูปแบบข้อมูล ซึ่งอยู่ในรูปแบบของ YAML จากการใช้งาน Stubby4J จะ configuration API ง่ายกว่า WireMock พอสมควร แต่ขอแนะนำให้ลองด้วยตนเองนะครับ

มีคนถามว่า ถ้า API พัฒนาเสร็จแล้ว มีการเปลี่ยนแปลงจากที่ตกลงกันไว้ล่ะ ?

คำตอบคือ ต้องเปลี่ยนไงล่ะ อย่าลืมเปลี่ยนใน WirMock ด้วยนะ และถ้าคุณมีชุดการทดสอบ ก็จะรู้ได้ทันทีว่า การเปลี่ยนแปลงเหล่านั้น กระทบต่อระบบของคุณหรือไม่ ?
ซึ่งเป็นประเด็นที่สำคัญมาก ๆ คุณรู้หรือไม่ว่า การเปลี่ยนแปลงต่าง ๆ มันส่งผลกระทบอะไรบ้าง ?

และยังมีเครื่องมืออื่น ๆ ให้ลองใช้งานอีกมากมาย

ไม่ว่าจะเป็น

Viewing all articles
Browse latest Browse all 1997

Trending Articles