Xem toàn bộ series bài viết hướng dẫn xây dựng ứng dụng Questions Management tại đây.
Trong bài viết trước, chúng ta đã chuẩn bị tất cả các cấu hình cần thiết để có thể xây dựng API thêm mới question như: một đối tượng chứa tất cả các thông tin của một câu hỏi CompositeQuestion bao gồm Question, Category và Option; một interface CompositeQuestionService với implementation là CompositeQuestionServiceImpl có trách nhiệm thao tác với Composite Question Service, một ApiQuestionController định nghĩa các API của API Question Service sẽ bắt đầu với “/question” và thông tin về Composite Question Service được cấu hình trong tập tin application.properties. Bây giờ, chúng ta sẽ tiến hành xây dựng API này các bạn nhé!
Để xây dựng API thêm mới question, đầu tiên, mình sẽ thêm mới một phương thức createNewQuestion() trong interface CompositeQuestionService:
1 |
Mono<CompositeQuestion> createNewQuestion(Question question); |
với phần implementation của method này gọi tới Composite Question Service trong class CompositeQuestionServiceImpl như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@Override public Mono<CompositeQuestion> createNewQuestion(Question question) { WebClient client = WebClient.builder() .baseUrl(getServiceUrl()) .build(); WebClient.ResponseSpec responseSpec = client.post() .uri("/question/add") .body(BodyInserters.fromObject(question)) .retrieve(); return responseSpec.bodyToMono(CompositeQuestion.class); } |
Như các bạn thấy, ở đây mình đã sử dụng đối tượng WebClient để kết nối tới Composite Question Service và gọi API thêm mới question của service này với URI “/question/add”.
Tiếp theo, mình sẽ thêm mới một method gọi tới phương thức createNewQuestion() của CompositeQuestionService để expose một POST request “/question/add” trong ApiQuestionController như sau:
1 2 3 4 5 6 |
@PostMapping("/add") public Mono<ResponseEntity<CompositeQuestion>> createNewQuestion(@RequestBody Question question) { return compositeQuestionService.createNewQuestion(question) .map(compositeQuestion -> ResponseEntity.ok(compositeQuestion)) .defaultIfEmpty(ResponseEntity.notFound().build()); } |
Đến đây thì chúng ta đã hoàn thành việc xây dựng API thêm mới question cho API Question Service rồi đó các bạn. Hãy test thử xem sao nhé.