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 tìm question theo id 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 tìm question theo id, đầu tiên, mình sẽ thêm mới một phương thức findQuestionById() trong interface CompositeQuestionService:
1 |
Mono<CompositeQuestion> findQuestionById(String id); |
với phần implementation của method này trong class CompositeQuestionServiceImpl như sau:
1 2 3 4 5 6 7 8 9 10 11 12 |
@Override public Mono<CompositeQuestion> findQuestionById(String id) { WebClient client = WebClient.builder() .baseUrl(getServiceUrl()) .build(); WebClient.ResponseSpec responseSpec = client.get() .uri("/question/" + id) .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 tìm question theo id của service này với URI “/question/{id}”.
Tiếp theo, mình sẽ thêm mới một method gọi tới phương thức findQuestionById() của CompositeQuestionService để expose một GET request “/question/{id}” trong ApiQuestionController như sau:
1 2 3 4 5 6 |
@GetMapping("/{id}") public Mono<ResponseEntity<CompositeQuestion>> findQuestionById(@PathVariable(value = "id") String questionId) { return compositeQuestionService.findQuestionById(questionId) .map(category -> ResponseEntity.ok(category)) .defaultIfEmpty(ResponseEntity.notFound().build()); } |
Đến đây thì chúng ta đã hoàn thành việc xây dựng API tìm question theo id cho API Question Service rồi đó các bạn. Hãy test thử xem sao nhé.