ช่วงวันหยุดว่าง ๆ ลองเขียนภาษาใหม่ ๆ ดูหน่อย
พอดีไปเจอตัวอย่าง code ภาษา Elixir แล้วชอบ เลยต้องลอง
คิดว่าน่าจะลองหาอะไรทำดูหน่อย
ตั้งโจทย์ว่า จะลองทำ RESTFul API แบบง่าย ๆ ทำการส่งผลกลับมาในรูปแบบของ JSON
จึงทำการบันทึกผลการลองครั้งนี้ไว้ดังนี้
ขั้นตอนที่ 1 ทำการติดตั้ง Elixir 1.8.2
ในส่วนนี้ใช้งานผ่าน Docker ด้วย Image Elixir
พบว่าขนาดใหญ่มาก ๆ ถึง 1.08 GB !!!
โหดร้ายต่อการเริ่มมาก ๆ
ขั้นตอนที่ 2 ลองสร้าง project เล่นชื่อว่า hello
[gist id="9b6601f4d9c959698c67d00581a7f9c4" file="1.txt"]สิ่งที่ต้องการคือ สร้าง RESTFul API + JSON ซึ่งจะใช้งาน library ดังนี้
- Cowboy เป็น HTTP framework ที่เล็ก ๆ เพราะว่าไม่ต้องการอะไรมากมาย
- Poison สำหรับการจัดการข้อมูลในรูปแบบ JSON
ทำการเพิ่ม library เข้าไปใน project ด้วยการแก้ไขไฟล์ mix.exs
[gist id="9b6601f4d9c959698c67d00581a7f9c4" file="mix.exs"]ปัญหาที่เจอคือ ไม่สามารถใช้งานผ่าน Docker Image ปกติได้
ต้องทำการติดตั้งบางอย่างก่อน จึงทำการ custom image นิดหน่อยดังนี้
ขั้นตอนที่ 3 Elixir เตรียมเรื่องของการทดสอบและ formatting code มาให้
ในส่วนนี้ชอบมาก ๆ เพราะว่ามีมาให้เลย
[gist id="9b6601f4d9c959698c67d00581a7f9c4" file="2.txt"]ขั้นตอนที่ 4 มาสร้างระบบงานที่ต้องการ
จากที่อ่านเอกสารของ Cowboy มานั้น
การใช้งานก็ไม่ยากเท่าไร
แต่ต้องการแยกส่วนการทำงานชัดเจนและ configuration ได้ง่าย
จึงแบ่งเป็นส่วนงานดังนี้
- Endpoint สำหรับกำหนด endpoint ของ API ต่าง ๆ
- Application สำหรับกำหนดจุดเริ่มต้นการทำงานของระบบ เพื่อ load สิ่งต่าง ๆ ที่ต้องใช้งานในการ start service ของระบบงาน
- มี config สำหรับการใช้งานในแต่ละส่วนเช่น dev, test และ prod เป็นต้น ซึ่ง Elixir project มีให้แล้ว แค่ใช้ให้ถูกเท่านั้นเอง ตรงนี้ไม่ง่าย
ส่วนที่ 1 Endpoint
[gist id="9b6601f4d9c959698c67d00581a7f9c4" file="endpoint.ex"]ส่วนที่ 2 Application
[gist id="9b6601f4d9c959698c67d00581a7f9c4" file="application.ex"]เมื่อทุกอย่างเตรียมพร้อมแล้ว
ก็มากำหนดจุดเริ่มต้นของการทำงานคือ Application ในไฟล์ mix.exs ดังนี้
[gist id="9b6601f4d9c959698c67d00581a7f9c4" file="mix2.exs"]ขั้นตอนที่ 5 ทำการ compile และ run ระบบงาน
ด้วยคำสั่ง
[gist id="9b6601f4d9c959698c67d00581a7f9c4" file="3.txt"]ได้ลองเรียนรู้ภาษา Elixir มานิดหน่อย
ต่อไปจะได้ลองลงรายละเอียดของภาษาต่อไป
มันสนุกดีนะ
Source code ตัวอย่างอยู่ที่ GitHub::Up1