Spring Boot คือ ตอนที่ 11 : การสร้าง RESTful Web Service

  1. RESTful Web Services คืออะไร
  2. การตั้งค่าแอปพลิเคชัน Spring Boot
  3. การสร้างวัตถุโดเมน (Domain Object)
  4. การสร้างคอนโทรลเลอร์ (Controller)
  5. การดำเนินการ CRUD
  6. เรียกใช้แอปพลิเคชัน

เมื่อพูดถึงการทำเว็บแอปพลิเคชันระดับองค์กร Spring Boot เป็นเฟรมเวิร์กที่มักจะโดดเด่นเนื่องจากความสามารถในการเร่งกระบวนการทำแอพ ลดความซับซ้อนในการกำหนดค่า และให้กระบวนทัศน์ที่ชัดเจนสำหรับนักพัฒนาที่จะปฏิบัติตาม ลักษณะที่โดดเด่นที่สุดประการหนึ่งของ Spring Boot คือความสามารถในการช่วยในการสร้างบริการเว็บ RESTful ในบทความนี้ เราจะพูดถึงวิธีทำแอพใน Spring Boot ที่ให้บริการเว็บ RESTful

1. RESTful Web Services คืออะไร

Regentational State Transfer หรือที่เรียกกันทั่วไปว่า REST เป็นรูปแบบสถาปัตยกรรมสำหรับการออกแบบแอปพลิเคชันบนเครือข่าย บริการเว็บ RESTful เป็นบริการเว็บที่สร้างขึ้นโดยใช้หลักการ RESTful บริการเหล่านี้มักสร้างผ่าน HTTP ให้การทำงานร่วมกันระหว่างระบบต่างๆ บนอินเทอร์เน็ต

บริการเว็บ RESTful ใช้วิธี HTTP อย่างชัดเจนเพื่อดำเนินการ CRUD (สร้าง ดึงข้อมูล อัปเดต ลบ) ในทรัพยากร ซึ่งโดยปกติจะแสดงในรูปแบบ JSON หรือ XML ไม่มีสถานะซึ่งหมายความว่าแต่ละคำขอ HTTP เกิดขึ้นโดยแยกจากกันโดยสิ้นเชิง สิ่งที่ถูกส่งไปมาระหว่างไคลเอนต์และเซิร์ฟเวอร์มีข้อมูลทั้งหมดที่จำเป็นในการทำความเข้าใจและดำเนินการตามคำขอ

2. การตั้งค่าแอปพลิเคชัน Spring Boot

ก่อนที่เราจะเริ่มสร้างบริการเว็บ RESTful เราต้องตั้งค่าแอปพลิเคชัน Spring Boot ก่อน ตรงไปที่ Spring Initializr ซึ่งเป็นเครื่องมือที่ Spring จัดหาให้เพื่อบูตแอปพลิเคชัน Spring Boot

สำหรับบทช่วยสอนนี้ คุณสามารถคงการตั้งค่าเริ่มต้นไว้ได้ แต่ต้องแน่ใจว่าคุณเพิ่ม “Spring Web” เป็นการอ้างอิง ซึ่งรวมถึง Spring MVC และ Tomcat ดังนั้นการตั้งค่าสภาพแวดล้อมที่สมบูรณ์แบบสำหรับบริการ RESTful ของเรา

ดาวน์โหลดและแตกโปรเจ็กต์ จากนั้นเปิดใน IDE ที่คุณชื่นชอบ

3. การสร้างวัตถุโดเมน (Domain Object)

สำหรับจุดประสงค์ของบทความนี้ สมมติว่าเรากำลังทำแอพง่ายๆ ที่จัดการ ‘Book’ ดังนั้นเราจึงต้องการคลาส Book สร้างแพ็คเกจใหม่ชื่อ ‘domain’ และภายในแพ็คเกจนั้น สร้างคลาส Java ใหม่ชื่อ ‘Book’ คลาส Book จะมีคุณสมบัติเช่น ‘id’, ‘title’, ‘author’ และ ‘isbn’

นี่คือลักษณะของคลาส Book ของคุณ:

package com.example.demo.domain;

public class Book {
    private Long id;
    private String title;
    private String author;
    private String isbn;

    // Constructors, Getters, and Setters...
}

4. การสร้างคอนโทรลเลอร์ (Controller)

ตอนนี้เราจะสร้างบริการเว็บ RESTful บริการมักจะให้บริการโดย ‘Controllers’ ใน Spring MVC ในแพ็คเกจ ‘Controllers’ ให้สร้างคลาสใหม่ชื่อ BookController

คลาส BookController ควรมีลักษณะดังนี้:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/books")
public class BookController {
    // Code will go here...
}

คำอธิบายประกอบ @RestController ทำเครื่องหมายคลาสนี้เป็นตัวควบคุมโดยที่ทุกเมธอดจะส่งคืนวัตถุโดเมนแทนการดู มันย่อมาจาก @Controller และ @ResponseBody ม้วนเข้าด้วยกัน คำอธิบายประกอบ @RequestMapping("/api/books") จะใช้เพื่อแมปคำขอเว็บกับคลาสตัวจัดการและ/หรือเมธอดตัวจัดการเฉพาะ

5. การดำเนินการ CRUD

ตอนนี้ เราจะให้การดำเนินการ CRUD เพื่อความง่าย เราจะใช้รายการในหน่วยความจำเพื่อเก็บหนังสือของเรา แอปพลิเคชันในโลกแห่งความเป็นจริงจะใช้ฐานข้อมูล แต่นั่นอยู่นอกเหนือขอบเขตของบทความนี้

นี่คือสิ่งที่คลาส BookController ของคุณจะมีลักษณะเหมือนการดำเนินการ CRUD:

package com.example.demo.controller;

import com.example.demo.domain.Book;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;

@RestController
@RequestMapping("/api/books")
public class BookController {

    private List<Book> books = new ArrayList<>();
    private AtomicLong counter = new AtomicLong();

    @GetMapping("/")
    public List<Book> getAllBooks() {
        return books;
    }

    @PostMapping("/")
    public Book createBook(@RequestBody Book book) {
        long id = counter.incrementAndGet();
        book.setId(id);
        books.add(book);
        return book;
    }

    @GetMapping("/{id}")
    public Book getBook(@PathVariable("id") long id) {
        return books.stream()
                .filter(b -> b.getId() == id)
                .findFirst()
                .orElse(null);
    }

    @PutMapping("/{id}")
    public Book updateBook(@PathVariable("id") long id, @RequestBody Book updatedBook) {
        Book book = getBook(id);
        if (book != null) {
            book.setTitle(updatedBook.getTitle());
            book.setAuthor(updatedBook.getAuthor());
            book.setIsbn(updatedBook.getIsbn());
        }
        return book;
    }

    @DeleteMapping("/{id}")
    public void deleteBook(@PathVariable("id") long id) {
        books.removeIf(b -> b.getId() == id);
    }
}

คอนโทรลเลอร์ด้านบนให้บริการห้ารายการ:

  • GET /api/books/ : ส่งคืนรายการหนังสือทั้งหมด
  • POST /api/books/ : สร้างหนังสือเล่มใหม่ ข้อมูลสำหรับหนังสือเล่มใหม่มีอยู่ในเนื้อหาของคำขอ
  • GET /api/books/{id} : ส่งคืนหนังสือพร้อมรหัสที่ระบุ
  • PUT /api/books/{id} : อัปเดตหนังสือด้วยรหัสที่ระบุ ข้อมูลใหม่มีอยู่ในเนื้อหาของคำขอ
  • DELETE /api/books/{id} : ลบหนังสือที่มีรหัสที่ระบุ

6. เรียกใช้แอปพลิเคชัน

ในการเรียกใช้แอปพลิเคชัน ให้ค้นหาวิธีการ main ในคลาส DemoApplication และเรียกใช้ แอปพลิเคชันจะเริ่มทำงาน และคุณสามารถใช้เครื่องมือเช่นบุรุษไปรษณีย์เพื่อทดสอบบริการ RESTful ของคุณได้


บทความนี้สาธิตวิธีทำแอพอย่างง่ายโดยใช้ Spring Boot และวิธีสร้างบริการบนเว็บ RESTful ด้วย ให้ภาพรวมของรูปแบบสถาปัตยกรรม REST อธิบายการตั้งค่าพื้นฐานของแอปพลิเคชัน Spring Boot และนำคุณไปทีละขั้นตอนผ่านการสร้างตัวควบคุมที่ให้บริการ RESTful แม้ว่าตัวอย่างนี้จะค่อนข้างพื้นฐาน แต่ก็ควรให้พื้นฐานที่มั่นคงแก่คุณในการทำแอพที่ซับซ้อนมากขึ้น โปรดจำไว้ว่าการฝึกฝนเป็นสิ่งสำคัญ และอย่าลังเลที่จะสำรวจหัวข้อขั้นสูงเพิ่มเติมเมื่อคุณคุ้นเคยกับพื้นฐานแล้ว


Spring Boot คืออะไร

Spring Boot คือ ตอนที่ 10 : การรับรองความถูกต้อง (Authentication) และการอนุญาต (Authorization)
Spring Boot คือ ตอนที่ 12 : การพัฒนาไมโครเซอร์วิส (Microservices)