백엔드/Spring Boot

6. 블로그 기획하고 API 만들기 흐름 요약

두개의 문 2023. 8. 14. 23:13

1. 데이터베이스에서 테이블 구조와 매핑될 엔티티 구성 

  - src/main/java/domain → Article.java

  - @Entity 애너테이션 사용 

 


 

2. 레포지터리 생성 

  - src/main/java/repository → BlogRepository.java

  - 인터페이스로, JpaRepository 상속받아 JPA에서 제공하는 메서드 이용 

  - 상속 받을 때, 인수로 < Entity 이름, 기본키 타입 > 지정해야 함 

 

 


 

3. 글 작성 API 구현 

1) 컨트롤러로부터 서비스 계층에서 요청받을 객체 생성 

  - src/main/java/dto → AddArticleRequest.java

 

2) 서비스 

  - src/main/java/service → BlogService.java

  - save() 메서드 추가  

   • 매개변수 : AddArticleRequest

   • 반환값 : Article 

 

3) 컨트롤러 

  - src/main/java/controller → BlogApiController.java

  - '/api/articles' POST 요청 : BlogService의 save() 메서드 호출 결과, Article을 반환하는 AddArticle() 메서드 추가 

   • 매개변수 : AddArticleRequest

   • 반환값 : ResponseEntity<Article>

 


 

4. 글 전체 목록 조회 API

1) 서비스 

  - findAll() 메서드 추가 

   • 매개변수 없음 

   • 반환값 : List<Article>

 

2) 컨트롤러 

  - 응답을 위한 DTO 객체 생성 : src/main/java/dto → ArticleResponse.java 

  - 'api/articles' GET 요청 : 전체 글 조회한 뒤 반환하는 findAllArticles() 메서드 추가 

   • 매개변수 없음 

   • 반환타입 : ResponsEntity<List<ArticleResponse>>

  

 


 

5. 한 개의 글 조회 API

1) 서비스 

  - findById() 메서드 추가 

   • 매개변수 : long id

   • 반환값 : Article

 

2) 컨트롤러 

  -'/api/articles/{id}' GET 요청 : findArticle() 메서드 추가 

   • 매개변수 : @PathVariable long id

   • 반환값 : ResponseEntity<ArticleResponse>

 


 

6. 한 개의 글 삭제 API

1) 서비스 

  - delete() 추가 

   • 매개변수 : long id

   • 반환값 없음 

 

2) 컨트롤러 

  - '/api/articles/{id}' DELETE 요청 : deleteArticle() 메서드 추가 

   • 매개변수 : @PathVariable long id

   • 반환값 : ResponseEntity<Void>

 


 

7. 글 수정 API

1) 엔티티에 update() 메서드 추가 

  - Article.java : @Getter만 추가 → 읽기 전용 

     ⇒ CRUD에서 Update 기능 불가능 

 

2) 블로그 글 수정 요청을 받을 DTO 객체 추가 

  - /src/main/java/dto → UpdateArticleRequest.java

  

3) 서비스 

  - update() 

   • 매개변수 : long id, UpdateArticleRequest 

   • 반환값 : Article

 

4) 컨트롤러 

  -'/api/articles/{id}' PUT 요청 → updateArticle() 메서드 추가 

   • 매개변수 : @PathVariable long id, UpdateArticleRequest 

   • 반환값 : ResponseEntity<Article>