ArticleApiController는 RESTful API를 사용하여 게시판에 있는 게시글에 대한 CRUD(Create, Read, Update, Delete) 작업을 처리하는 컨트롤러입니다. ArticleController와 다르게 @RestContrller를 사용하였으며 그래서 따로 분류하였습니다. 코드와 주요 기능은 다음과 같습니다.
package tomato.classifier.api;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import tomato.classifier.dto.ArticleDto;
import tomato.classifier.entity.Article;
import tomato.classifier.repository.ArticleRepository;
import tomato.classifier.service.ArticleService;
import javax.transaction.Transactional;
@RestController
@RequestMapping("/article")
@RequiredArgsConstructor
public class ArticleApiController {
private final ArticleService articleService;
@PostMapping("/add")
public ResponseEntity<ArticleDto> write(@RequestBody ArticleDto articleDto) {
ArticleDto write = articleService.write(articleDto);
return ResponseEntity.status(HttpStatus.OK).body(write);
}
@PatchMapping("/edit/{articleId}")
public ResponseEntity<ArticleDto> edit(@PathVariable Integer articleId, @RequestBody ArticleDto articleDto) {
ArticleDto updatedDto = articleService.edit(articleId, articleDto);
return ResponseEntity.status(HttpStatus.OK).body(updatedDto);
}
@DeleteMapping("/delete/{articleId}")
public ResponseEntity<Article> delete(@PathVariable Integer articleId) {
Article deleted = articleService.delete(articleId);
return ResponseEntity.status(HttpStatus.OK).body(deleted);
}
}
REST는 REpresentative State Transfer의 약자로 분산 시스템을 위한 아키텍처입니다. 네트워크를 경유해서 외부 서버에 접속하거나 필요한 정보를 불러오기 위한 구조라고 생각할 수 있습니다. 그리고 이 REST 개념을 바탕으로 설계된 시스템을 'RESTFul'이라고 표현합니다. 이런 RESTFul한 웹 서비스를 구축하기 위해 사용하는 것이 RestController 입니다.
특정 URI로 요청을 보내면 Controller에서 어떠한 방식으로 처리할지 정의를 한다. 이때 들어온 요청을 특정 메서드와 매핑하기 위해 사용하는 것이 @RequestMapping입니다. 여기서는 기본 URI를 "/article"로 지정합니다. 즉, 이 컨트롤러의 엔드포인트들은 "/article"을 시작으로 합니다.
이 어노테이션은 Lombok 프로젝트에서 제공하는 기능으로, 클래스의 final 필드에 대한 생성자를 자동으로 생성합니다. 이 클래스에서는 ArticleService를 final로 선언하고 생성자에서 주입받고 있으므로, 이 어노테이션을 사용하여 생성자를 자동으로 생성합니다.
private final ArticleService articleService : ArticleService 인스턴스를 주입받는 필드입니다. 이 컨트롤러는 ArticleService를 통해 비즈니스 로직을 수행합니다.