Day04
REST API 실습
yml 파일 세팅
- JPA 세팅
- DataBase 세팅
- GitRepo
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
단건 출력하기
{id}
로 파라미터가 들어왔을때 id 값을 받아 출력 반환- GitRepo
article 등록, 수정, 삭제 테스트
- 게시글 등록
- JSON데이터를 받기위해서 DTO를 추가해야한다.
- ArticleDTO의 기본 생성자가 없어 Final필드의 값을 입력할 수 없어 에러가 발생
- 추후 JSON통신 방식으로 변경
- 게시글 수정
@PathVariable("id)
로 게시글 선택- 등록과 동일한 방법으로 처리
- 게시글 삭제
@PathVariable("id)
로 게시글 선택
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
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.