สร้าง RESTful API ง่ายๆด้วย Spring Framework & Spring Boot (Part 1/2)

Thirajade Lekkunlawat
Grean Developers Family
4 min readJun 21, 2018

ขอเกริ่นก่อน ด้วยความที่ว่า เริ่มรู้สึกว่า เห้ย ไอ่ประกาศรับสมัครงาน developer ต่างๆนี่ ทำไมเดี๋ยวนี้เค้ารับสมัครตำแหน่ง Java Developer เยอะจังเลยอ่ะ ด้วยความสงสัยว่าเห้ย จริงๆแล้วมันใช้ทำอะไร ก็เลยเป็นจุดเริ่มต้นที่ทำให้มารู้จัก Java EE กับ Spring เนี่ยแหล่ะ

Java EE กับ Spring framework คืออะไร?

Java EE หรือ Java Enterprise Edition หรือ J2EE เนี่ย(จริงๆตอนนี้เปลี่ยนเป็น Jakarta EE แล้วนะ) มันก็คือ Java ธรรมดาที่ยกระดับขึ้นไปอีกนิ้ดนึงโดยจะมีการเพิ่ม Library หรือ Runtime Environment ที่ใช้สำหรับทำ web application หรือ application ที่มีขนาดใหญ่นั่นเอง

Spring framework สั้นๆ คือ framework ที่มาช่วยในการอำนวยความสะดวกในการสร้าง web application

Spring boot ก็สั้นๆอีก คือเปรียบเสมือนอุปกรณ์ที่ช่วยให้เราสามารถ “เริ่ม” ทำ web application ด้วย spring framework ได้เร็วขึ้น (ช่วย setup config ต่างๆ)

สิ่งที่เราจะลงมือทำ

Web service ที่จะส่งรายชื่อเครื่องสำอางที่แฟนเรามีมาให้เรา เมื่อเราส่ง HTTP method GET ไปให้ที่ลิ้งด้านล่างนี้

http://localhost:8080/cosmetics

โดยที่รายชื่อเครื่องสำอางที่ได้มาจะมีหน้าตาประมาณนี้ (ถึงจริงๆจะไม่ได้มีแค่นี้ก็เถอะ)

{"id":"LIP001","name":"XOXO Lipstick", "amount":1},
{"id":"BRO001","name":"NYX Brush On Palette", "amount":1}

แล้วเราก็จะสั่งลบเครื่องสำอางที่เราต้องการผ่านลิ้งค์ด้านล่างนี้ โดยใช้ HTTP method DELETE ซึ่ง id ก็คือตัวเลข id ที่เราเห็นตามรูปด้านบนเมื่อครู่นั่นเอง

http://localhost:8080/cosmetics/{id}

ตัวอย่างเช่น เรา HTTP method DELETE ไปที่ลิ้งค์ด้านล่าง

http://localhost:8080/cosmetics/LIP001

ผลลัพธ์ที่ได้ก็คือ LIP001 จะหายไปตามรูปด้านล่างนั่นเอง

{"id":"BRO001","name":"NYX Brush on palette", "amount":1}

สิ่งที่ต้องเตรียม !

  • JDK 1.8 (อย่าลืม set JAVA_HOME)

วิธี set ตามไปที่ลิ้งค์นี้โลด https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/

  • Spring Tool Suite หรือจะเป็น Eclipse, Netbeans ก็ได้นะ
  • เวลาสักว่างๆสัก 15 นาที

ลงมือกันได้เลย

  1. สร้างโปรเจค

ขั้นแรกเริ่มจากเปิด Spring Tool Suite แล้วทำการสร้าง Project กันก่อนโดยไปที่

File -> New -> New Spring Starter Project แล้วทำการกรอกข้อมูลตามด้านล่างโลด

เมื่อกรอกเสร็จแล้วก็กด Next ไปที่หน้าถัดไปแล้วก็ทำการเลือก Dependencies สำหรับโปรเจคเรา

เราจะใช้ Spring Boot Version 2.0.3 และ dependency ที่เราจำเป็นต้องใช้มีแค่ Web เท่านั้น

เสิชหา dependency โดยการพิมพ์ชื่อไปในช่อง Available จากนั้นติ้กถูกเพื่อเลือก dependency นั้นๆ

เมื่อเลือกแล้วสามารถกด Finish ทางขวาล่างได้เลย ก็จะได้โปรเจคมาโปรเจคนึงที่มีหน้าตาแบบนี้

2. สร้าง class สำหรับจัดเก็บข้อมูล

ทำการสร้าง class ใหม่ขึ้นมาที่ชื่อว่า Cosmetic ซึ่งจะมีหน้าตาแบบนี้

package com.thirajade.cosmetic.api;public class Cosmetic {private String id;
private String name;
private int amount;
public Cosmetic(String id, String name, int amount){
this.id = id;
this.name = name;
this.amount = amount;
}
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
}

3. สร้าง class ใหม่ที่ทำหน้าที่เป็น RestController เพื่อ map URL กับ function ของเรา

การที่จะทำให้ class ธรรมดานั้น กลายเป็น RestController สามารถทำได้โดยการใส่สิ่งที่เรียกว่า Annotation ที่บนหัวของ class นั้นนั่นเอง ซึ่ง Annotation ที่จะใช้คือ

package com.thirajade.cosmetic.api;
import org.springframework.web.bind.annotation.RestController;
@RestController // annotation นี้จะทำให้ class นี้กลายเป็น RestController
public class CosmeticController {
}

หลังจากนั้นเราจะต้องทำการสร้างข้อมูลเครื่องสำอางไว้สักหน่อย

List<Cosmetic> cosmetics = new ArrayList<>(Arrays.asList(
new Cosmetic("LIP001", "XOXO Lipstick", 1),
new Cosmetic("BRO001", "NYX Brush On Palette", 1)
));

แล้วเราก็จะทำการสร้าง function ที่จะมาทำหน้าที่ส่งข้อมูลเครื่องสำอางมาให้เรา

public List<Cosmetic> getAllCosmetics() {
return cosmetics;
}

แต่ๆๆๆ แค่นั้นยังไม่พอ เราจะต้องเอา function นี้ไปผูกกับ URL ก่อน ซึ่งเราก็สามารถทำได้โดยใช้ annotation ที่ชื่อว่า @RequestMapping นั่นเอง

วิธีใช้ก็คือ ใส่ไปบนหัว function นั้นนั่นแหล่ะ แต่จะต้องใส่ URL ตามไปด้วย

@RequestMapping("/cosmetics")    // แบบนี้
public List<Cosmetic> getAllCosmetics() {
return cosmetics;
}

รวมๆแล้วเราจะได้ Controller หน้าตาเหมือนด้านล่างนี้เป๊ะเลย

package com.thirajade.cosmetic.api;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CosmeticController {
List<Cosmetic> cosmetics = new ArrayList<>(Arrays.asList(
new Cosmetic("LIP001", "XOXO Lipstick", 1),
new Cosmetic("BRO001", "NYX Brush On Palette", 1)
));
@RequestMapping("/cosmetics")
public List<Cosmetic> getAllCosmetics() {
return cosmetics;
}
}

4. รัน !

ก่อนอื่นทำการรัน application ของเราก่อนเลยโดยการกดปุ่ม Run ใน Spring Tool Suite นั่นแหล่ะ

เมื่อรันแล้วใน Console ของ Spring Tool Suite จะแสดงผลแบบรูปด้านล่างให้เห็นแสดงว่า Spring application ของเราได้ถูกรันเรียบร้อย

.   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.3.RELEASE)
และ log ด้านล่างอีกมากมาย บลาๆ

5. ทดสอบ RESTful API ของเรากัน

เราสามารถทำการทดสอบได้โดยเปิด web browser สักอันนึง แล้วไปที่ URL

http://localhost:8080/cosmetics

ผลลัพธ์ที่ได้ก็คือ

[{"id":"LIP001","name":"XOXO Lipstick","amount":1},{"id":"BRO001","name":"NYX Brush On Palette","amount":1}]

แสดงว่า Spring application ที่เป็น RESTful API ของเราทำงานถูกต้องแล้ว ฮือ น้ำตาจะไหล

บทสรุป (ของ Part 1/2)

เราก็ได้ทำการสร้าง RESTful API โดยใช้ Java EE, Spring framework และ Spring boot ขึ้นมา ซึ่งสามารถทำได้ง่ายๆ และ ใช้เวลาไม่นานจริงๆ

ส่วนการลบเครื่องสำอางของแฟนนั้น เดี๋ยวจะมาต่อกันใน part 2/2 ครับ (ถ้ายังไม่เป็นอะไรไปซะก่อน)

สำหรับ part 2 ไปดูได้ที่นี่เลยครับ
https://medium.com/grean-developers-family/%E0%B8%AA%E0%B8%A3%E0%B9%89%E0%B8%B2%E0%B8%87-restful-api-%E0%B8%87%E0%B9%88%E0%B8%B2%E0%B8%A2%E0%B9%86%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-spring-framework-spring-boot-part-2-2-f0978e87eec0

อ้างอิงจาก

--

--