포스트

Day04

REST API 실습

yml 파일 세팅

RestAPI 요청 체계

  • 게시물 목록 : GET http://localhost:8080/articles
  • 게시물 등록 : POST http://localhost:8080/articles
  • 게시물 단건 조회 : GET http://localhost:8080/articles/1
  • 게시물 수정 : PATCH http://localhost:8080/articles/1 (전체)
  • 게시물 수정 : PUT http://localhost:8080/articles/1 (부분)
  • 게시물 삭제 : DELETE http://localhost:8080/articles/1
  • 회원 목록 : GET http://localhost:8080/members

기본 도메인 작업

  • 도메인 controller, service, repository, entity, dto 파일 생성
  • GitRepo

기본 Controller mapping

  • @RequestMapping(“/api/v1/articles”) 을 진입하여 Mapiing 정보 생성
  • @RestController를 활용하여 Response가 포함된 controller를 명시
  • GitRepo

목록 리스트 출력하기

  • Article객체에 담긴 데이터를 ArticleDTO객체에 담아서 클라이언트로 반환
  • GitRepo image

단건 출력하기

  • {id}로 파라미터가 들어왔을때 id 값을 받아 출력 반환
  • GitRepo image

article 등록, 수정, 삭제 테스트

  • 게시글 등록
    • JSON데이터를 받기위해서 DTO를 추가해야한다.
    • ArticleDTO의 기본 생성자가 없어 Final필드의 값을 입력할 수 없어 에러가 발생
    • 추후 JSON통신 방식으로 변경
  • 게시글 수정
    • @PathVariable("id)로 게시글 선택
    • 등록과 동일한 방법으로 처리
  • 게시글 삭제
    • @PathVariable("id)로 게시글 선택
게시글 등록게시글 수정게시글 삭제
imageimageimage

RsData 클래스를 도입 - 조회

  • 조회 요청이 들어왔을 때 서버에서 데이터를 처리하고 response 결과값을 반환
  • ResultData구조
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    @Getter
    @Setter
    @AllArgsConstructor
    public class RsData<T> {
        private String resultCode;
        private String msg;
        private T data;
        public static <T> RsData<T> of(String resultCode, String msg, T data) {
            return new RsData<>(resultCode, msg, data);
        }
        public static <T> RsData<T> of(String resultCode, String msg) {
            return of(resultCode, msg, null);
        }
        @JsonIgnore
        public boolean isSuccess() {
            return resultCode.startsWith("200");
        }
        @JsonIgnore
        public boolean isFail() {
            return !isSuccess();
        }
    }
    

    템플릿 메서드 : 반환값에 data의 동적으로 관리
    @JsonIgnore : JSON 데이터 변환 무시, 서버 내부에서 사용하는 값

Response, Request 객체 도입

RequestDTO

  • 클라이언트에서 JSON으로 데이터를 보내면 매핑할 DTO객체를 만들어야 한다.
  • @RequestBody를 통해 받을 수 있는 객체를 만든다.

ResponseDTO

  • 클라이언트에서 받은 데이터를 서비스단에서 처리 후 클라이언트에 JSON 형태의 내보낼 DTO객체를 만든다.
  • 서비스단에서 반환되는 객체는 Entity이다 이 entity를 DTO로 변환한다.

  • GitRepo

수정, 삭제, DTO 분리

서비스단 작성

스웨거 도입

  • build.gradle의존성 추가 : implementation ‘org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0’
  • @RestController변경 : @RequestMapping(value = “/api/v1/articles”, produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE)
    • produces : 컨트롤러의 메서드들이 생성하는 응답의 Content-Type을 지정(여기서는 application/json)
    • consumes : 컨트롤러가 받아들일 수 있는 요청의 Content-Type을 지정(여기서는 application/json)
  • @tag(클래스 설명) : @Tag(name = “ApiV1ArticleController”, description = “게시글 CRUD API”)
    • name : api문서의 제목
    • description : api문서의 설명
  • @Operation(매서드설명) : @Operation(summary = “게시글 다건 조회”)
  • GitRepo image
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.