ในการพัฒนาปัจจุบันมักนิยมแยกการทำงานเป็นส่วนๆ
เช่น Web, API, Database
ในส่วนของ API มักจะใช้ RESTful
และข้อมูลที่แลกเปลี่ยนกันมักจะอยู่ในรูปแบบ JSON ( JavaScribt Object Notation )
ดังนั้นมาดูกันว่า เราจะพัฒนาด้วยภาษา Go อย่างไรกันบ้าง
Go นั้นได้เตรียม package net/http มาให้แล้ว
สำหรับพัฒนา Web server บน HTTP protocol
ซึ่งผลอธิบายรายละเอียดไว้ที่ blog การสร้าง Web server
โดยสามารถเขียน code ในการสร้าง Web server
ให้ทำงานผ่าน port 8080 ได้ดังนี้
ต่อมาสิ่งที่ต้องการคือ การสร้างข้อมูลส่งกลับไปยังผู้ร้องขอในรูปแบบ JSON
ด้วย package encoding/json
ลองทำการ parse จากข้อความในรูปแบบ JSON มาอยู่ใน Data structure ที่ต้องการดังนี้
เมื่อสามารถสร้างทั้งสองส่วนแล้ว
นำมารวมกัน ซึ่ง request ที่ส่วนมาต้องมีข้อมูล
ในรูปแบบ JSON ที่กำหนดด้วยเช่นกัน
สามารถเขียน code ได้ดังนี้
คำอธิบาย
ทำการแปลงข้อมูลที่อยู่ใน body ของ request ที่ส่งเข้ามาในรูปแบบที่ต้องการ
ข้อมูลอยู่ในรูปแบบดังนี้
- ID
- Title
- Done
ถ้าข้อมูลไม่ถูกต้องจะส่งคำว่า bad request กลับไป
แต่ถ้าสามารถแปลงข้อมูลได้ จะทำการสร้างผลลัพธ์ในรูปแบบ JSON
เพื่อส่งกลับไปยังผู้ร้องขอ
ทำการทดสอบส่งข้อมูลผ่าน curl
$curl -X POST localhost:8080 -d "{\"ID\":1, \"Title\":\"Title 1\", \"Done\":false}”
ผลการทำงาน
{“ID”:1,”Title”:”Title 1″,”Done”:false}
หรือทดสอบผ่าน REST client บน Chrome ดังรูป
จากตัวอย่างการใช้งานพบว่า
เราสามารถทำการส่งข้อมูลไปยัง server
ด้วย HTTP method อะไรก็ได้ ดังรูป
แน่นอนว่าในการสร้าง RESTful APIs เราต้องกำหนดว่า
สามารถใช้งานผ่าน HTTP method อะไรได้บ้าง
จากตัวอย่างผมต้องการให้ใช้งานผ่าน HTTP POST เท่านั้น
ดังนั้นต้องเพิ่ม code ตรวจสอบไปดังนี้
ผลการทำงาน จะใช้งานผ่าน HTTP POST เท่านั้น ดังรูป
มาถึงตรงนี้เราสามารถสร้าง RESTful APIs เองได้สบายๆ
แต่ชีวิตอาจจะเหนื่อยสักหน่อย ถ้าเราเอามาใช้งานจริง
ตามจริงเขียนเองก็ได้นะครับ
ผมจึงลองดูว่า มี framework อะไรให้ใช้แบบง่ายๆ หน่อยไหม ?
เจอตัวที่ได้รับความนิยมคือ Gorilla Mux
ดังนั้น ลองใช้งานหน่อยสิ ว่าง่ายจริงไหม ??
เริ่มด้วยการ download และติดตั้ง package นี้ซะ ด้วยคำสั่ง
$go get github.com/gorilla/mux
และทำการพัฒนาระบบ web application ด้วย Gorilla กันนิดหน่อย
กำหนดให้เข้าใช้งานผ่าน URI /task โดยแบ่งส่วนการทำงานดังนี้
- GET = ดึงข้อมูลงานใน TODO ทั้งหมด
- POST = ทำการสร้าง task ใหม่ขึ้นมา
ตัวอย่าง code เป็นดังนี้
ทดสอบใช้งานผ่าน curl ดังรูป
สามารถดู Code เพิ่มเติมได้จากที่ Github :: Demo My TODO
ต่อไปจะทำการพัฒนา Client web application ด้วย Angular อย่างง่าย
เพื่อนำมา integrate เข้ากับ RESTful APIs ที่สร้างไว้