- BC Java - Assignment 09 - RESTful API
- Requirements
- Question 1: API Hello World (Onboarding task)
- Question 2: Service Greeting (Dependency Injection)
- Question 3: API Máy tính đơn giản (Calculator)
- Question 4: Quản lý sản phẩm (Product CRUD – In-Memory)
- Question 5: Quản lý sinh viên (Student API)
- Question 6: Tạo Bean Config thủ công (AppConfig)
- Question 7: Tìm kiếm sách (Book Search API)
- Question 8: Quản lý nhân viên (Employee + Exception Handling)
- Question 9: Kiến trúc chuẩn 3 Layer (Customer API)
- Prerequisites
- Author
- Requirements
- Problem:
- Team muốn kiểm tra môi trường của bạn.
- Hãy xây dựng một REST API:
GET /hello→ trả về"Hello Spring Boot!"
- Solution: Full source: Question 1
- URL: http:localhost:8080/hello
- Problem:
- Product Owner muốn một API chào người dùng.
- Tạo GreetingService với method
sayHello(String name). - API GET
/greet?name=Alice→ trả vềHello Alice!.
- Solution: Full source: Question 2
- URL: http:localhost:8080/greet?name=Alice
- Problem:
- Khách hàng muốn một service tính toán online.
- GET
/calc/add?x=10&y=5→15 - GET
/calc/subtract?x=10&y=5→5 - GET
/calc/multiply?x=10&y=5→50 - GET
/calc/divide?x=10&y=5→2
- GET
- Khách hàng muốn một service tính toán online.
- Solution: Full source: Question 3
- CalculatorController
- CalculatorService
- OperatorCalculation: Define operation calculator enum
- StringToOperationTypeCalculator: Convert string (path) to enum
- URL:
- Problem:
- Team muốn mock thử một API quản lý sản phẩm.
- GET
/products→ trả về danh sách. - POST
/products(JSON) → thêm sản phẩm. - GET
/products/{id}→ xem chi tiết. - PUT
/products/{id}→ cập nhật sản phẩm. - DELETE
/products/{id}→ xóa sản phẩm.
- GET
- Team muốn mock thử một API quản lý sản phẩm.
- Solution: Full source: Question 4
- URLs:
-
Lấy danh sách sản phẩm (GET): http:localhost:8080/products
-
Lấy thông tin chi tiết của sản phầm theo ID (GET) http:localhost:8080/products/1
-
Thêm mới một sản phẩm (POST): http:localhost:8080/products/
{ "name": "iPhone Dual", "price": 999.99, "quantity": 1000 } -
Cập nhật thông tin sản phẩm (PUT): http:localhost:8080/products/1
{ "name": "iPhone 84", "price": 2026, "quantity": 84 } -
Xóa sản phẩm (DELETE): http:localhost:8080/products/1
-
- Problem:
- Team education cần API quản lý student.
- API:
- POST
/students→ thêm student từ JSON - GET
/students/{id}→ trả về student theo ID
- POST
- Solution: Full source: Question 5
- URLs:
- Lấy thông tin sinh viên theo ID (GET): http://localhost:8080/students/1
-
Thêm mới sinh viên (POST): http://localhost:8080/students/
{ "email": "ngkhang@gmail.com", "fullName": "Nguyễn Khang" }
-
- Lấy thông tin sinh viên theo ID (GET): http://localhost:8080/students/1
- Problem:
- CTO muốn bạn thử tạo Bean thủ công thay vì @Service.
- Tạo AppConfig với @Configuration.
- Định nghĩa @Bean cho GreetingService.
- Inject vào Controller để sử dụng.
- CTO muốn bạn thử tạo Bean thủ công thay vì @Service.
- Solution: Full source: Question 6
- URL: GET http://localhost:8080/greet-v2
- Problem:
- Khách hàng muốn API tìm kiếm sách theo tác giả.
- GET
/books/search?author=abc→ trả về danh sách sách của tác giả đó.
- GET
- Khách hàng muốn API tìm kiếm sách theo tác giả.
- Solution: Full source: Question 7
- URL:
- Tìm danh sách của sách theo tác giả (GET): http://localhost:8080/books/search?author=abc
-
Problem:
- Team HR cần API quản lý nhân viên.
- GET
/employees/{id}→ trả về nhân viên.- Nếu không có ID → trả về lỗi:
{ "error": "Employee not found", "status": 404 }
- Nếu không có ID → trả về lỗi:
-
Solution: Full source: Question 8
-
URL: Lấy thông tin nhân viên theo ID (GET)
- ID tồn tại: http://localhost:8080/employees/1
- ID không tồn tại: http://localhost:8080/employees/999
- Problem:
- Tech lead muốn project chia đúng tầng:
- Controller: nhận request.
- Service: xử lý logic.
- Repository: quản lý dữ liệu (In-memory).
- Entity Customer(id, name, phone).
- Tech lead muốn project chia đúng tầng:
- Solution: Full source: Question 9
- URL:
- Lấy danh sách khách hàng (GET): http://localhost:8080/customer
- IDE: IntelliJ
- Java 21
Khang Nguyen