สอนสร้าง REST API ด้วย Spring Boot

สอนสร้าง REST API ด้วย Spring Boot

Spring Boot คือเฟรมเวิร์กของ Java ที่ช่วยให้เริ่มโปรเจกต์เซิร์ฟเวอร์ได้เร็ว ค่าตั้งต้นส่วนใหญ่ถูกจัดให้แล้ว เช่น เซิร์ฟเวอร์ Tomcat ในตัว การเชื่อมฐานข้อมูล และการแปลงข้อมูลเป็น JSON บทความนี้จะพาสร้าง REST API ขนาดเล็กที่แบ่งเป็นสามชั้นคือ Controller, Service และ Repository

หมายเหตุการทดสอบ: เครื่องที่ใช้เขียนบทความนี้ไม่มี Maven หรือ Gradle และการดาวน์โหลดไลบรารีของ Spring ยังไม่ได้ทดสอบ โค้ดด้านล่างเป็นรูปแบบมาตรฐาน ควรรันเองตามขั้นตอนและตรวจผลก่อนใช้งานจริง

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

ภาพรวมของสามชั้น

ภาพแผนผัง: Controller รับคำขอ HTTP ส่งต่อให้ Service และ Service ใช้ Repository เข้าถึงฐานข้อมูล
ภาพแผนผัง: Controller รับคำขอ HTTP ส่งต่อให้ Service และ Service ใช้ Repository เข้าถึงฐานข้อมูล

ขั้นที่ 1: สร้างโปรเจกต์

ไปที่ https://start.spring.io เลือก Maven, Java 17 และเพิ่มดีเพนเดนซี Spring Web และ Spring Data JPA แล้วดาวน์โหลดและแตกไฟล์

ขั้นที่ 2: สร้างคลาสข้อมูล

package com.example.demo;

import jakarta.persistence.*;

@Entity
public class Note {
    @Id
    @GeneratedValue
    private Long id;
    private String title;

    public Note() {}
    public Note(String title) { this.title = title; }

    public Long getId() { return id; }
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }
}

ขั้นที่ 3: Repository

package com.example.demo;

import org.springframework.data.jpa.repository.JpaRepository;

public interface NoteRepository extends JpaRepository<Note, Long> {
}

Spring Data สร้างเมธอดพื้นฐาน เช่น `findAll`, `save` และ `deleteById` ให้เองจากการสืบทอด `JpaRepository`

ขั้นที่ 4: Service

package com.example.demo;

import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class NoteService {
    private final NoteRepository repository;

    public NoteService(NoteRepository repository) {
        this.repository = repository;
    }

    public List<Note> all() {
        return repository.findAll();
    }

    public Note create(String title) {
        return repository.save(new Note(title));
    }
}

ขั้นที่ 5: Controller

package com.example.demo;

import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/api/notes")
public class NoteController {
    private final NoteService service;

    public NoteController(NoteService service) {
        this.service = service;
    }

    @GetMapping
    public List<Note> list() {
        return service.all();
    }

    @PostMapping
    public Note create(@RequestBody Note body) {
        return service.create(body.getTitle());
    }
}

ขั้นที่ 6: รันและทดสอบ

./mvnw spring-boot:run

ทดสอบด้วย curl

curl -X POST http://localhost:8080/api/notes -H "Content-Type: application/json" -d "{\"title\":\"ซื้อกาแฟ\"}"
curl http://localhost:8080/api/notes

ข้อผิดพลาดที่มักพบ

ขั้นต่อไป

เพิ่มการตรวจสอบข้อมูล การจัดการข้อผิดพลาดด้วย `@ControllerAdvice` และการทดสอบ Service ด้วย JUnit

สรุป

Spring Boot จัดโครงสร้าง REST API เป็นสามชั้น Controller รับคำขอ Service จัดการตรรกะ และ Repository คุยกับฐานข้อมูล การแบ่งชั้นทำให้โค้ดทดสอบและดูแลได้ง่ายขึ้น