มาสร้าง RESTful Web Service ด้วย Spring Boot กันดีกว่า

Phayao Boonon
2 min readJun 19, 2018

--

เราจะมาสร้าง hello world ของ RESTful Web Service ง่ายๆ ด้วย Spring Boot กัน

มาวางแผนกันก่อนว่าอะไรบ้างที่เราจะสร้าง

เราจะมาสร้าง web service ง่ายๆ ที่รองรับ HTTP request ด้วย GET method โดยมี endpoint ชื่อว่า greeting, URL ก็จะประมาณนี้

http://localhost:8080/greeting

และ response ก็จะเป็น JSON ที่ประกอบด้วย id และ content ว่า “Hello, World!”

{"id":1,"content":"Hello, World!"}

นอกจากนี้เราจะสร้าง web service ให้รับ query parameter ได้ โดยใช้ชื่อว่า “name” ที่รับค่าเป็นชื่อ, URL ก็จะประมาณนี้

http://localhost:8080/greeting?name=User

เมื่อเราเรียก endpoint ของ web service ด้วย query parameter ค่าของ “name” นั้นก็คือ “User” จะแทนที่คำว่า “World” และ response ก็จะได้

{"id":1,"content":"Hello, User!"}

มาสร้าง Project กันก่อน

ในบทความนี้จะสร้าง project ด้วย maven ดังนั้น ต้องแน่ใจว่าเครื่องของคุณใช้ maven ได้น่ะครับ

สร้างโครงสร้างของ project เป็น src/main/java/hello และสร้าง pom.xml โครงสร้างตามนี้

└── src
└── main
└── java
└── hello
└── pom.xml

โค้ด xml ด้านล่างนี้เป็น snippet เพื่อสร้าง maven config ของ project ชื่อว่า rest-service

เริิ่มสร้างกันเลยดีกว่า

สร้าง resource representation

หลังจากได้ project แล้วก็มาสร้าง web service ให้เป็นไปตามที่เราออกแบบไว้ดีกว่า

โดยที่ service ของเราจะจัดการกับ “GET” request ของ /greeting endpoint และรับค่าของ query parameter ที่ชื่อว่า “name” โดยจะ response ไปเป็น HTTP status 200 OK นั้นหมายความว่าเราทำการ process request เรียบร้อยและก็สำเร็จ

{
"id": 1,
"content": "Hello, World!"
}

response จะเป็น JSON object ที่มี 2 ค่านั้นก็คือ “id” เป็นตัวเลขเฉพาะที่ระบุหมายเลขของ response และ “content” จะแสดงข้อความ “Hello, World!”

เพื่อที่จะโมเดลข้อมูลที่เป็นตัวแทน greeting โดยสร้าง java class ตัวแทน resource representation ขึ้นมา ชื่อว่า Greeting ใน package hello ดังนี้

src/main/java/hello/Greeting.java

สร้าง resource controller

ต่อไปก็สร้าง resource controller ที่จะให้บริการ HTTP request /greeting

Spring Boot จะจัดการกับ HTTP request ด้วย Controller ซึ่งสามารถระบุว่า class นั้นเป็น controller ก็เพียงแค่ใส่ annotation @RestControler ด้านบนของชื่อ class

เพื่อที่จะจัดการ HTTP request ของ endpoint /greeting เราก็สร้าง java class ที่ชื่อว่า GreetingController ขึ้นมาและใส่ annotation ดังนี้

src/main/java/hello/GreetingController.java

Class ที่สร้างขึ้นนี้กระชับและง่าย แต่ก็มีรายละเอียดที่จะอธิบายเพิ่มเติมคือ

@ReqeustMapping เป็น annotation เพื่อ map HTTP request “/greeting” มายัง “greeting()” method

@RequestParam เพื่อเชื่อมโยงค่าของ query parameter “name” มายังตัวแปล name และให้มี defaultValue เป็น “World”

สำหรับ method implementation ก็สร้าง Greeting object ด้วยการเพิ่มค่าของ counter และ

สร้าง Application สำหรับ run web service

แม้ว่าเราสามารรัน application ด้วยการสร้างไฟล์ WAR และเอาไปฝังไว้ในเว็บเซอร์เวอร์ แต่ว่าบทความนี้จะรัน web service ใช้เป็น standalone application เหมือนกัน java application ทั่วๆ ไป โดยใช้ความสามารถของ Spring Boot เราสร้าง class Application ขึ้นมาโดยมี main() method เป็น entry point

src/main/java/hello/Application.java

@SpringBootApplication คือ annotation แบบสั้นสำหรับเพิ่มชุดของ annotation @Configuration, @EnableConfiguration และ @ComponentScan ไปที่หัวของ class Application

ใน main() จะเรียก SpringApplication.run() เพื่อเป็นการเริ่มต้น application ของ web service

สุดท้ายแล้วเราจะได้โครงสร้างของ project ดังนี้

└── src
└── main
└── java
└── hello
└── Application.java
└── Greeting.java
└── GreetingController.java
└── pom.xml

มารัน web service กัน

หลังจากที่เราได้สร้างไฟล์ต่างๆ ไปแล้ว ตอนนี้เราก็จะมารัน application เพื่อสร้าง web service ด้วย maven ใช้คำสั่งนี้ ซึ่งจะเป็นคำสั่งที่รวม clean ไฟล์ที่สร้างไว้ก่อนหน้านี้ และทำการ build แล้ว package ไว้ในไฟล์ JAR

mvn clean package

อาจจะต้องใช้เวลานิดหน่อยในการรัน เพราะว่าบางทีหรือรันครั้งแรก maven จะไป download dependency ที่อยู่ใน pom.xml มาเก็บไว้ใน maven repository และใช้มันในการ build application

หลังจากนั้นเราจะได้ไฟล์ rest-service-0.1.0.jar อยู่ในโฟล์เดอร์ target ซึ่งเป็นไฟล์ที่ใช้รัน application และเราก็รันดัวยคำสั่ง java

java -jar target/rest-service-0.1.0.jar

มาทดสอบ web service กันดีกว่า

หลังจากที่เรารัน application แล้ว เราก็มาทดสอบว่า web service ที่เราสร้างขึ้นทำงานได้อย่างที่เราออกแบบไว้หรือป่าว

เริ่มต้นด้วยใช้ web browser หรืออาจจะใช้ Postman ก็ได้ HTTP request ไปที่ endpoint ที่เราออกแบบไว้, URL ดังนี้

http://localhost:8080/greeting

จะได้ response ดังนี้

{
“id”: 1,
“content”: “Hello, World!”
}

ต่อไปลอง HTTP request ด้วย query parameter “name”, URL ดังนี้

http://localhost:8080/greeting?name=User

จะได้ response ดังนี้

{
“id”: 2,
“content”: “Hello, User!”
}

จะสังเกตว่าค่าของ “id” เพิ่มขึ้นทุกครั้งที่มีการ request นั้นเพราะว่าในโค้ดของเรา increase ตัวแปล counter ทุกๆ ครั้งที่มีการ request “/greeting” endpoint แม่ว่าจะมีหรือไม่มี query parameter ก็ตาม

เป็นไงบ้างครับ เราทำ RESTful web service อย่างง่าย ที่สร้างด้วย Spring Boot มาแล้ว ง่ายใช่ไหมครับ!!!

บทความนี้เป็นเวอร์ชันแปลของ https://spring.io/guides/gs/rest-service/

ถ้าไม่อยากพิมพ์ก็ clone โค้ดจาก GitHub ผมลิงค์ข้างล่างนี้ มาลองรันได้นะครับ

https://github.com/iphayao/spring-boot-restful-service.git

--

--

Phayao Boonon
Phayao Boonon

Written by Phayao Boonon

Software Engineer 👨🏻‍💻 Stay Hungry Stay Foolish

No responses yet