- 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)
- Question 10: Quản lý đơn hàng (Order với Product – OneToMany)
- 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/0
- 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
- Problem:
- Khách hàng muốn API quản lý Order.
- Entity Order(id, customerName, List).
- POST
/orders→ tạo order với danh sách sản phẩm. - GET
/orders→ trả về toàn bộ order.
- Khách hàng muốn API quản lý Order.
- Solution: Full source: Question 10
- URL:
- Lấy danh sách đơn hàng (GET): http://localhost:8080/orders
- Tạo đơn hàng mới (POST): http://localhost:8080/orders
-
Body:
{ "customerName": "Nguyễn Văn A", "products": [ { "id": 2, "productName": "Mac mini", "price": 900, "quantity": 2 } ] }
-
- Tạo đơn hàng mới (POST): http://localhost:8080/orders
- Lấy danh sách đơn hàng (GET): http://localhost:8080/orders
- URL:
./
│ .gitattributes
│ .gitignore
│ HELP.md
│ mvnw
│ mvnw.cmd
│ pom.xml
│ README.md
│
├───.mvn
│ └───wrapper
└───src
└───main
├───java
│ └───com
│ └───cybersoft
│ └───restfulapi
│ ├───question1
│ ├───question2
│ │ ├───controller
│ │ └───service
│ ├───question3
│ │ ├───controller
│ │ └───service
│ ├───question4
│ │ ├───controller
│ │ ├───dto
│ │ ├───model
│ │ ├───repository
│ │ └───service
│ ├───question5
│ │ ├───controller
│ │ ├───model
│ │ └───service
│ ├───question6
│ │ ├───controller
│ │ └───service
│ ├───question7
│ │ ├───controller
│ │ ├───model
│ │ └───service
│ ├───question8
│ │ ├───controller
│ │ ├───exception
│ │ ├───model
│ │ └───service
│ ├───question9
│ │ ├───controller
│ │ ├───model
│ │ ├───repository
│ │ └───service
│ └───question10
│ ├───controller
│ ├───model
│ ├───repository
│ └───service
└───resources
└───application.properties
- IDE: IntelliJ
- Java 21
Khang Nguyen