![]()
![]()
จากการพูดคุยเรื่องการทดสอบ
RESTful API ที่ Facebook
มีการพูดถึง
Silk ซึ่งเป็น framework สำหรับการทดสอบ RESTful API
ด้วยการเขียนเอกสารในรูปแบบ
Markdown
ดังนั้นจึงลองนำมาใช้งานแบบขำ ๆ กันหน่อย
เริ่มต้นด้วยการติดตั้ง Silk
สิ่งที่ต้องติดตั้งก่อนคือภาษา
Go
จากนั้นทำการกำหนด $GOPATH ให้พร้อม
ทำการติดตั้งด้วยคำสั่ง
[code]
$go get github.com/matryer/silk
[/code]
จากนั้นก็สามารถใช้งานคำสั่ง silk ได้
ซึ่งอยู่ที่ $GOPATH/bin
สร้าง RESTful API แบบง่าย ๆ เอาไว้ทดสอบนิดหน่อย
โดยเลือกใช้
stubby4j มาช่วยสร้าง
เนื่องจากมันง่าย ๆ มาก
สิ่งที่ต้องการคือ API เป็นดังนี้
- Request ใช้งานผ่าน HTTP GET
- Response ทำการส่งค่า id และ name ในรูปแบบ JSON
สามารถสร้าง APIs ง่าย ๆ ดังนี้
[gist id="2d6ad8c05079ad9e27a646a4f9f77494" file="test.yaml"]
มี response เป็นดังนี้
[gist id="2d6ad8c05079ad9e27a646a4f9f77494" file="response.json"]
ทำการ start API server ด้วยคำสั่ง
[code]
$java -jar stubby4j-version -d test.yaml
[/code]
ได้เวลานำ Silk มาใช้ทดสอบ API ที่สร้างกันแล้ว
แนวคิดของ Silk นั้นดูเรียบง่ายมาก ๆ คือ
ทำการเขียนเอกสารเพื่ออธิบาย API ในรูปแบบ Markdown ปกติ
และได้ทำการกำหนดข้อตกลงการใช้งานสำหรับเรื่องต่าง ๆ ไว้ให้ เช่น
- โครงสร้างของเอกสารเป็นอย่างไร
- การกำหนด Request และรูปแบบข้อมูลต่าง ๆ ทั้ง parameter, header, cookie และ body
- การตรวจสอบผลการทำงาน หรือ assert reponse ที่ API ส่งกลับมาเช่น Response code, content type และ data เป็นต้น
ตัวอย่างการทดสอบ API ข้างต้นสามารถเขียนง่าย ๆ ได้ดังนี้
[gist id="2d6ad8c05079ad9e27a646a4f9f77494" file="get_user_by_id.md"]
จากนั้นสามารถทดสอบ API ที่เขียนอธิบายในไฟล์ markdown ดังนี้
[code]
$silk -silk.url="http://localhost:8882/" get_user_by_id.md
[/code]
ผลการทำงานแสดงดังนี้
[code]
silk: running 1 file(s)...
PASS
[/code]
คำอธิบาย
ทำการกำหนด url ของ API
ทำการกำหนดไฟล์ markdown ที่เขียนอธิบาย API ไว้
ซึ่งสามารถระบุได้มากกว่า 1 file หรือสามารถใช้ wildcard ก็ได้นะ เช่น *.md
เพียงเท่านี้ก็สามารถเขียนเอกสารอธิบาย API
ซึ่งทดสอบได้อีกด้วย
แสดงว่าเราได้สร้างเอกสารที่มีชีวิตขึ้นมาแล้วนะครับ
Source code ตัวอย่างอยู่ที่
Github:Hello Silk
ปล. ถ้าใครเขียน code ภาษา Go เป็น
ก็สามารถเขียน code เพื่อทดสอบผ่าน silk runner ได้อีกด้วย
ซึ่งแน่นอนว่าจะมีประโยชน์และยืดหยุ่นกว่าการใช้งาน commad line
Reference Websites
http://go-talks.appspot.com/github.com/matryer/silk/other/presentation/silk.slide#1