Screen Shot 2557-05-04 at 11.42.36 AM

ในการพัฒนาปัจจุบันมักนิยมแยกการทำงานเป็นส่วนๆ
เช่น 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
เพื่อส่งกลับไปยังผู้ร้องขอ

ภาพแสดง bad request
Screen Shot 2557-05-04 at 10.41.33 AM

ทำการทดสอบส่งข้อมูลผ่าน curl

$curl -X POST localhost:8080 -d "{\"ID\":1, \"Title\":\"Title 1\", \"Done\":false}”

ผลการทำงาน
{“ID”:1,”Title”:”Title 1″,”Done”:false}

หรือทดสอบผ่าน REST client บน Chrome ดังรูป

Screen Shot 2557-05-04 at 10.49.05 AM

จากตัวอย่างการใช้งานพบว่า
เราสามารถทำการส่งข้อมูลไปยัง server
ด้วย HTTP method อะไรก็ได้ ดังรูป

Screen Shot 2557-05-04 at 10.52.00 AM

แน่นอนว่าในการสร้าง RESTful APIs เราต้องกำหนดว่า
สามารถใช้งานผ่าน HTTP method อะไรได้บ้าง
จากตัวอย่างผมต้องการให้ใช้งานผ่าน HTTP POST เท่านั้น
ดังนั้นต้องเพิ่ม code ตรวจสอบไปดังนี้

ผลการทำงาน จะใช้งานผ่าน HTTP POST เท่านั้น ดังรูป

Screen Shot 2557-05-04 at 10.55.53 AM

มาถึงตรงนี้เราสามารถสร้าง RESTful APIs เองได้สบายๆ
แต่ชีวิตอาจจะเหนื่อยสักหน่อย ถ้าเราเอามาใช้งานจริง
ตามจริงเขียนเองก็ได้นะครับ

ผมจึงลองดูว่า มี framework อะไรให้ใช้แบบง่ายๆ หน่อยไหม ?
เจอตัวที่ได้รับความนิยมคือ Gorilla Mux
ดังนั้น ลองใช้งานหน่อยสิ ว่าง่ายจริงไหม ??

เริ่มด้วยการ download และติดตั้ง package นี้ซะ ด้วยคำสั่ง

$go get github.com/gorilla/mux

และทำการพัฒนาระบบ web application ด้วย Gorilla กันนิดหน่อย

กำหนดให้เข้าใช้งานผ่าน URI /task โดยแบ่งส่วนการทำงานดังนี้

  • GET = ดึงข้อมูลงานใน TODO ทั้งหมด
  • POST = ทำการสร้าง task ใหม่ขึ้นมา

ตัวอย่าง code เป็นดังนี้

ทดสอบใช้งานผ่าน curl ดังรูป

Screen Shot 2557-05-04 at 11.25.43 AM

สามารถดู Code เพิ่มเติมได้จากที่ Github :: Demo My TODO

ต่อไปจะทำการพัฒนา Client web application ด้วย Angular อย่างง่าย
เพื่อนำมา integrate เข้ากับ RESTful APIs  ที่สร้างไว้