Spring Boot cho người mới: dựng REST API Java chỉ trong vài bước

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Java vẫn là lựa chọn quen thuộc cho nhiều hệ thống doanh nghiệp, và Spring Boot là cách phổ biến nhất để viết backend Java hiện nay. Nó loại bỏ phần lớn cấu hình rườm rà ngày xưa, để bạn dựng được API chạy thật chỉ trong vài phút.

Spring Boot giải quyết điều gì?

Spring Framework gốc rất mạnh nhưng cấu hình nhiều. Spring Boot bổ sung ba thứ: các gói "starter" gom sẵn thư viện cần thiết, tự cấu hình theo những gì có trong classpath, và máy chủ web nhúng (Tomcat mặc định) để bạn chạy ứng dụng như một chương trình Java bình thường, không cần cài server riêng.

Tạo dự án

Cách dễ nhất là dùng trang Spring Initializr: chọn Maven hoặc Gradle, ngôn ngữ Java, thêm các phụ thuộc Spring Web, Spring Data JPA, Validation và một database như H2 để thử. Tải về, giải nén, mở bằng IDE. Lớp chính trông như sau:

@SpringBootApplicationpublic class DemoApplication {    public static void main(String[] args) {        SpringApplication.run(DemoApplication.class, args);    }}

Controller đầu tiên

@RestController@RequestMapping("/api/books")public class BookController {    private final BookService service;    public BookController(BookService service) {        this.service = service;    }    @GetMapping    public List<Book> list() {        return service.findAll();    }    @GetMapping("/{id}")    public Book get(@PathVariable Long id) {        return service.findById(id);    }    @PostMapping    @ResponseStatus(HttpStatus.CREATED)    public Book create(@Valid @RequestBody BookRequest req) {        return service.create(req);    }}

Các chú thích như @GetMapping, @PathVariable, @RequestBody ánh xạ HTTP sang phương thức Java. Spring tự chuyển JSON thành đối tượng và ngược lại.

Truy cập dữ liệu với Spring Data JPA

@Entitypublic class Book {    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)    private Long id;    private String title;    private String author;    // getter, setter}public interface BookRepository extends JpaRepository<Book, Long> {    List<Book> findByAuthorContainingIgnoreCase(String author);}

Bạn chỉ khai báo interface, Spring Data tự sinh phần cài đặt, kể cả truy vấn dựa trên tên phương thức như findByAuthorContainingIgnoreCase. Cấu hình kết nối nằm trong application.properties hoặc application.yml.

Xử lý lỗi gọn gàng

@RestControllerAdvicepublic class ApiExceptionHandler {    @ExceptionHandler(NotFoundException.class)    public ResponseEntity<Map<String, String>> notFound(NotFoundException e) {        return ResponseEntity.status(HttpStatus.NOT_FOUND)                .body(Map.of("error", e.getMessage()));    }}

Một lớp @RestControllerAdvice gom việc xử lý lỗi cho toàn ứng dụng, giúp mọi endpoint trả lỗi cùng định dạng.

Những điều nên biết thêm

  • Profile: tách cấu hình cho môi trường dev, test, production bằng application-dev.yml...
  • Actuator: thêm endpoint kiểm tra sức khỏe và chỉ số vận hành, hữu ích khi triển khai.
  • DTO riêng: đừng trả thẳng entity ra ngoài, hãy dùng đối tượng truyền dữ liệu để kiểm soát những gì lộ ra.
  • Kiểm thử: @SpringBootTest và MockMvc cho test tích hợp, JUnit cho test đơn vị.
  • Đóng gói: tạo file JAR chạy được bằng ./mvnw package, rồi chạy bằng java -jar.

Đường cong học tập

Spring Boot có nhiều khái niệm: bean, dependency injection, auto-configuration, annotation. Ban đầu có thể thấy "phép màu" khó hiểu. Lời khuyên là đừng cố học hết cùng lúc; hãy xây một CRUD nhỏ, rồi lần lượt đào sâu từng phần khi gặp nhu cầu thật.

Cấu hình và bảo mật cơ bản

Đừng ghi mật khẩu database trực tiếp vào application.yml rồi đẩy lên Git. Hãy đọc từ biến môi trường bằng cú pháp như ${DB_PASSWORD}, để cùng một bản đóng gói chạy được ở nhiều môi trường. Khi cần xác thực và phân quyền, Spring Security là thành phần chuẩn, nhưng nó có đường cong học tập riêng; hãy bắt đầu với cấu hình đơn giản như bảo vệ vài đường dẫn và xác thực bằng JWT, rồi đọc tài liệu để hiểu chuỗi bộ lọc bên dưới.

Về hiệu năng, hãy chú ý lỗi N+1 giống mọi ORM: quan hệ lazy được nạp từng dòng một khi duyệt danh sách. Dùng @EntityGraph hoặc truy vấn JOIN FETCH để nạp trước dữ liệu cần thiết, và bật log SQL ở môi trường phát triển để luôn biết ứng dụng đang gửi gì xuống database.

Lộ trình học tiếp

Sau khi dựng được CRUD cơ bản, bạn nên học tiếp theo thứ tự: validation và xử lý lỗi, quan hệ giữa các entity, phân trang và sắp xếp, bảo mật với Spring Security, kiểm thử, rồi đến cấu hình nhiều môi trường và đóng gói bằng Docker. Mỗi bước thêm một kỹ năng thực tế mà nhà tuyển dụng thường tìm kiếm ở lập trình viên Java backend. Hãy luôn kiểm tra lại bằng thực hành thay vì chỉ đọc lý thuyết: dựng một dự án nhỏ, cố tình tạo lỗi, quan sát log và công cụ gỡ lỗi, rồi sửa. Đừng ngại đọc mã nguồn của các dự án mẫu chính thức; chúng thể hiện cách tổ chức mà cộng đồng đã đúc kết qua nhiều năm.

Một thói quen đáng có là luôn viết test cho từng endpoint ngay khi viết xong, vì nó ép bạn nghĩ về các trường hợp biên như dữ liệu rỗng, id không tồn tại hay người dùng không đủ quyền.

Kết luận

Spring Boot cho bạn nền tảng vững chắc, hệ sinh thái rộng và được dùng nhiều trong doanh nghiệp, nên kỹ năng này có giá trị khi đi làm. Hãy thử dựng API quản lý sách như ví dụ, chạy bằng H2 rồi chuyển sang MySQL hoặc PostgreSQL để làm quen việc cấu hình thực tế.

Khi cần một lộ trình học có hệ thống, bạn có thể tham khảo khóa học trên codebem.com.

author_photo
Nguyễn Đình Cường

0 comment