springuniverse

Tạo nhanh Restful API với Spring Boot và MongoDB

Chào mừng tất cả các bạn đến với bài viết đầu tiên trong năm mới Bính Thân 2016. Trong Series AngularJS cho người mới tôi đã từng đề cập rất nhiều đến Restful API, trong bài viết này tôi sẽ hướng dẫn các bạn xây dựng Restful API để trả dữ liệu về product cho frontend một cách nhanh nhất và đơn giản nhất đối với những bạn đã quen thuộc với Java bằng Spring BootMongoDB.

Nào cùng bắt đầu.

Đầu tiên các bạn tạo project với gradle bằng bất cứ IDE nào mà các bạn quen thuộc.

File build.gradle các bạn khai báo như sau.

Trong file này chúng ta khai báo các dependency, build script,… cũng như file main để chạy application.

Sau đó chúng ta khởi tạo file để chạy application, trong pakage com.codeaholicguy.demo ta tạo file Application.java như sau.

Đây chính là file để chạy application, từ đây chúng ta sẽ có root của application, Spring boot sẽ tự động scan các component từ package khai báo với annotation @SpringBootApplication trở xuống.

Annotation @SpringBootApplication là cách viết ngắn gọn của việc khai báo bằng các annotation sau.

  • @Configuration
  • @EnableAutoConfiguration
  • @ComponentScan

Tiếp theo ta tạo model dữ liệu. Tạo package com.codeaholicguy.demo.model trong đây chúng ta sẽ khai báo các model cho application. Chúng ta khai báo model Product như sau.

Ở đây tôi khai báo model Product với hai thuộc tính đơn giản là idname.

Tiếp đến ta tạo controller. Tạo package com.codeaholicguy.demo.controller, tại đây khai báo các controller. Chúng ta tạo ProductController với path là /products như sau.

Trong ProductsController tạo API để test với path là /test. Như vậy ta sẽ gọi /products/test để gọi API này.

Bây giờ các bạn đã có thể start để xem Restful API của chúng ta chạy như thế nào. Chạy file Application.java. Sau khi chạy các bạn chú ý log từ Spring Boot các bạn sẽ thấy.

Spring Boot sẽ scan tất cả các file từ file main application trở xuống và sẽ check xem nêú file đó được mark với annotation @Controller hay @RestController để mapping với path tương ứng được khai báo. Nếu các bạn không thấy đoạn log tương tự có nghĩa là các bạn đang có vấn đề về scope khai báo các file controller.

Nếu các bạn check log đã ổn, bây giờ thử gọi localhost:8080/products/test để kiểm tra xem application của chúng ta đã hoạt động.

Tiếp theo application của chúng ta đã chạy ổn thì chúng ta sẽ giải quyết tiếp đến phần dữ liệu sử dụng MongoDB.

Đầu tiên add thêm dependency để sử dụng Spring Data với MongoDB như sau.

Nếu bạn chưa cài đặt MongoDB và đang sử dụng Mac OS cài đặt bằng lệnh brew install mongodb. Nếu các bạn muốn manual install thì các bạn có thể tải về tại https://www.mongodb.com/download-center.

Bây giờ các bạn tạo một interface để tương tác với MongoDB. Tạo package com.codeaholicguy.demo.domain để chứa các thành phần thuộc về domain của application, trong package này tạo interface ProductRepository như sau.

Khi khai báo MongoRepository<Product, String> tương ứng bên trái là kiểu của collection bên phải là kiểu của id, Spring Data sẽ tự map repository với collection tương ứng trong MongoDB, interface này sẽ cung cấp cho các bạn hầu hết các phương thức cần dùng để tương tác với MongoDB. Và mặc định connection với MongoDB sẽ là localhost:27017 port mặc định của MongoDB sau khi cài đặt, nếu các bạn muốn custom thông tin connection các bạn có thể tham khảo ở đây http://docs.spring.io/spring-data/mongodb/docs/1.2.x/reference/html/mapping-chapter.html.

Ngoài ra các bạn đang thắc mắc vậy id sẽ được map như thế nào với object. Spring Data giúp các bạn map field trong object Java với id trong MongoDB bằng annotation @Id sử dụng như sau.

Tiếp theo các bạn khai báo service. Tạo package com.codeaholicguy.demo.service để chứ các file khai báo service. Tạo file ProductService như sau.

Cuối cùng apply service vào trong controller, sử dụng dependency injection như sau.

Bây giờ thử chạy lại application và gọi localhost:8080/products/all xem nào. Kết quả trả về rỗng ([]) đúng không nào. Giờ vào MongoDB và insert một vài data xem sao. Trong terminal các bạn gõ mongo để và mongo cli. Thêm một vài product bằng lệnh db.product.insert({name: ‘iPhone 6s’}).

Bây giờ thử gọi lại và các bạn sẽ thấy kết quả như sau.

Ngoài ra, với xu thế sử dụng microservices (nếu các bạn chưa biết về microservices các bạn có thể xem bài Giới thiệu về Microservices) thì việc health check các service là khá thường xuyên tuy nhiên chúng ta không nên để nhưng api dạng như /test trong code vì như thế làm code khá là xấu. Spring đưa cho chúng ta module spring-boot-starter-actuator, module này cung cấp cho các bạn khá nhiều tiện ích để monitor module như health check, metrics, mappings…

Hy vọng qua bài này các bạn đã có thể tự build cho mình một Restful API bằng Spring Boot và MongoDB một cách nhanh nhất. Nếu các bạn đã quen thuộc với Spring hãy xem qua loạt bài 69 câu hỏi phỏng vấn về Spring để củng cố kiến thức cũng như góp ý cho tôi nhé.

Source code trong bài các bạn có thể tìm thấy ở đây https://github.com/codeaholicguy/springboot-mongodb-demo.

Advertisements

5 thoughts on “Tạo nhanh Restful API với Spring Boot và MongoDB

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s