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

มาสร้าง Java 8 Web Server ด้วย Spark กัน

$
0
0

Spark_Java_Logo

Screen Shot 2558-12-03 at 9.51.41 PM สำหรับ Java Developer นั้น การจะสร้าง web application นั้นมันยากเย็นมากนัก ทั้งวิธีการเขียน code ที่เยอะ ทั้ง library ต่างๆ ที่ใช้งาน ทั้ง Web server หรือ Application server ตลอดจนการ deploy เพื่อทดสอบ นี่คือกระบวนการพัฒนาแบบคร่าว ๆ แน่นอนว่า feedback loop มันช้ามาก ๆ แต่หลาย ๆ คนก็ยังคงทำกันอยู่ ทำไมนะ ? ดังนั้น เรามาลองสร้าง Web Server และ Web Application ง่าย ๆ ด้วย Spark กันบ้างสิ ว่ามันช่วยลดงาน และ เพิ่มความเร็วในการพัฒนาบ้างไหม ?
ปล. Spark ที่พูดถึงคือ Spark Java นะครับ ไม่ใช่ Apache Spark !! เขียนครั้งแรกเมื่อปีที่แล้ว แต่ในปีนี้มันเปลี่ยนไปเยอะพอควร จึงนำมาเขียนใหม่

ทำความรู้จักกับ Spark กันหน่อย

เป็น framework เล็ก ๆ สำหรับการสร้าง Java web application โดยทำงานบน Java 8 ขึ้นไปเท่านั้น ได้รับแรงบันดาลใจมาจาก Sinatra มีเป้าหมายเพื่อ ทำให้เราสามารถพัฒนา web application ได้ง่าย และ เร็วขึ้น นั่นคือ Java Developer ใช้พลังงานน้อยลง แต่ได้งานออกมารวดเร็วกว่าเดิม มันช่วยเพิ่ม productivity เยอะเลย ที่สำคัญเอาไปพัฒนาในรูปแบบของ microservice ง่ายด้วยนะสิ ปล. ภาษาอื่น ๆ เขามีมานานแล้วนพ !!

ดังนั้นเราลองมาสร้าง Web application ด้วย Spark กันดีกว่า

ตามธรรมเนียมต้องเริ่มที่ Hello World นะสิ ขั้นตอนการสร้างก็ไม่ยากเป็นดังนี้

ขั้นตอนที่ 1 ตัวอย่างสร้าง project เป็น Maven project

ดังนั้นไฟล์ pom.xml ซึ่งประกอบไปด้วยส่วนที่น่าสนใจ คือ
  • Dependency ที่ใช้งานคือ spark-core
  • กำหนดการ build ของ Maven ให้ทำงานตามที่เราต้องการทั้งเวอร์ชันของ Java และการ package เป็นไฟล์ JAR ชื่อว่า demo_api.jar
  • กำหนด Main class คือ ServerAPI เป็น class สำหรับใช้ Start Web Server นั่นเอง
มีหน้าตาแบบนี้ [gist id="599a9379d47c2f0f648a" file="pom.xml"]

ขั้นตอนที่ 2 สร้าง class ServerAPI ขึ้นมา

เป็น class สำหรับ Start Web Server ซึ่งเราสามารถกำหนด endpoint ต่าง ๆ ของ web ได้เลย จากตัวอย่างจะรับ request ผ่าน HTTP GET มาที่ / และจะส่ง response กลับไปว่า Hello World กลับไป เขียนได้ดังนี้ [gist id="599a9379d47c2f0f648a" file="APIServer.java"]

ขั้นตอนที่ 3 จะช้าอยู่ทำไม run สิครับ

แน่นอนว่า run ด้วย maven สิ ดังนี้ $mvn clean package ผลที่ได้คือจะมีไฟล์ demo_api.jar อยู่ใน folder target จากนั้นทำงาน run demo_api.jar ซะ ดังนี้ $java -jar demo_api.jar ผลที่ได้เป็นดังนี้ [Thread-0] INFO org.eclipse.jetty.util.log - Logging initialized @200ms [Thread-0] INFO spark.webserver.JettySparkServer - == Spark has ignited ... [Thread-0] INFO spark.webserver.JettySparkServer - >> Listening on 0.0.0.0:4567 [Thread-0] INFO org.eclipse.jetty.server.Server - jetty-9.3.z-SNAPSHOT [Thread-0] INFO org.eclipse.jetty.server.ServerConnector - Started ServerConnector@5c4ca375{HTTP/1.1,[http/1.1]}{0.0.0.0:4567} [Thread-0] INFO org.eclipse.jetty.server.Server - Started @327ms จะสังเกตได้ว่า Web server จะทำการ start ขึ้นมาที่ port 4567 ทดสอบผ่าน browser หน่อยสิ ด้วย URL = http://localhost:4567/ ได้ผลดังรูป Screen Shot 2558-12-03 at 8.39.44 PM เพียงเท่านี้ก็สามารถสร้าง Java Web Application ได้แล้วนะ

แต่ว่ามันง่ายไปนะ ดังนั้นเราลองมาสร้าง REST API ใช้งานกันสักหน่อยดีกว่า

พอดีเขียน web ไม่เป็น เขียนเป็นแต่ REST API นะ ความต้องการ คือ เพิ่มข้อมูลพนักงานใหม่เข้าไปในระบบ สำหรับ REST API ต้องกำหนดดังนี้
  • Request ต้องผ่าน HTTP POST
  • Path ที่ใช้คือ /employee
ดังนั้นเรามาเขียน code กันดีกว่า เริ่มจากทำการเพิ่ม path ใน APIServer.java [gist id="599a9379d47c2f0f648a" file="APIServer2.java"] สังเกตได้ว่าในส่วนของ post มันจะแตกต่างออกไป ซึ่งเราสามารถเขียนได้หลายแบบ แต่ถ้าให้สวยงาม เราควรแยกออกไปเป็น class ใหม่ ซึ่ง class AddEmployee นั้นจะ extends จาก class Route ของ Spark ดังนี้ [gist id="599a9379d47c2f0f648a" file="AddEmployee.java"] จากนั้นลองทำการทดสอบผ่าน HTTP POST ดู เพียงเท่านี้ก็เรียบร้อย สำหรับการสร้าง REST API สำหรับการเพิ่มพนักงานใหม่ด้วย Spark ง่ายไหมนะ ? สามารถดู code ตัวอย่างเพิ่มเติมได้ที่ GitHub::Up1:Spark-Java-Demo

Viewing all articles
Browse latest Browse all 1997

Trending Articles