Cấu Trúc Dự Án Spring Boot: Hướng Dẫn Chi Tiết
Gần đây, tôi đã quay lại với Java và quyết định tìm hiểu về các framework liên quan, đặc biệt là Spring Boot. Trong bài viết này, tôi sẽ chia sẻ những kiến thức mà tôi thu thập được cùng với việc xây dựng một dự án nhỏ (RESTful API CRUD cho người dùng).
Giới Thiệu Dự Án
Dự án của chúng ta sẽ thực hiện chức năng CRUD cho người dùng. (Lưu ý: phần xác thực chưa được đề cập ở đây). Nội dung của bài viết sẽ bao gồm:
- Cấu trúc dự án
- Các bước xây dựng dự án
1) Cấu Trúc Dự Án
- Config: Nơi cấu hình các thông số cho dự án.
- Controller: Nhận các yêu cầu từ client.
- Filter: Kiểm tra dữ liệu vào controller và quyền người dùng.
- Request: Các object mà client gửi lên server. Không sử dụng chung với DB để tách biệt các layer.
- Response: Các object trả về cho client.
- Controller Classes: Chứa các lớp controller để xử lý yêu cầu.
- Exception: Nơi tập trung xử lý các ngoại lệ.
- Model: Định nghĩa các thực thể (Entity) của cơ sở dữ liệu.
- Repository: Kết nối tới cơ sở dữ liệu, thực hiện các chức năng lấy và lưu dữ liệu mà không chứa logic xử lý nghiệp vụ.
- Service: Chứa các logic nghiệp vụ.
- Utils: Các phương thức thường xuyên được tái sử dụng.
- Resources: Chứa các file
*.properties
. - Test: Được sử dụng cho các bài kiểm tra đơn vị.
2) Các Bước Xây Dựng Dự Án
B0: Quy Định Về Dữ Liệu
Dữ liệu gửi và nhận sẽ ở định dạng JSON với kiểu snake_case. Ví dụ:
json
{"error":"not_found","error_msg":"Người dùng không tồn tại"}
Khi có lỗi, cấu trúc dữ liệu trả về như sau:
json
{"error": "mã lỗi", "error_msg": "mô tả chi tiết về lỗi"}
B1: Pom
File pom.xml cần bao gồm các thư viện cần thiết:
xml
<dependencies>
<!-- Thêm các dependencies của dự án -->
</dependencies>
Ngoài ra, cần thêm plugin để tự động tạo database:
xml
<plugin>
...
</plugin>
B2: Cấu Hình Dự Án
Dự án sẽ chạy với 3 môi trường khác nhau: dev, staging, prod. Cấu hình trong file application.properties
:
properties
spring.profiles.active=dev
Cấu hình cụ thể cho môi trường dev trong file application-dev.properties
:
properties
# Database Properties
spring.datasource.url=jdbc:mysql://localhost:2216/users-database?allowPublicKeyRetrieval=true&useSSL=false
...
B3: Entity
Định nghĩa lớp User trong package Model:
java
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
...
}
B4: Repository
Tạo lớp UserRepository
để tương tác với cơ sở dữ liệu:
java
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
Page<User> findAll(Pageable pageable);
}
B5: Service
Tạo lớp Service cho người dùng để xử lý nghiệp vụ:
java
public interface UserService {
Optional<User> findUser(Long id);
...
}
B6: Controller
Tạo lớp Controller chịu trách nhiệm cho các API CRUD:
java
@RestController
@RequestMapping("/api/v1")
public class UserController {...}
Định nghĩa các API như tạo người dùng, lấy danh sách, cập nhật, xóa người dùng.
B7: Kiểm Tra
Sử dụng thư viện Spring MockMvc để kiểm tra các API:
java
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class ApplicationTests {...}
Kết Luận
Tôi mới chỉ tìm hiểu để xây dựng dự án với Spring Boot và chưa hoàn thiện tất cả các tính năng, chẳng hạn như xác thực. Trong bài viết tiếp theo, tôi sẽ bổ sung thêm phần xác thực và phân quyền cho dự án. Nếu bạn muốn tham khảo mã nguồn, hãy để lại email, tôi sẽ gửi cho bạn.
source: viblo