[Dining-together] REST API 구조 설계하기

Jifrozen·2021년 5월 25일
0

Dining-together

목록 보기
2/25

REST API 구조 설계하기

api 를 배포하면 구조를 쉽게 변경할 수 없기 때문에 효율적이고 확장 가능한 형태로 작성해야한다.

  1. http method 구분해서 사용
    post:쓰기
    get:읽기
    put:수정
    delete:삭제

  2. 매핑된 주소 체계를 정형화
    Post /auth/login
    Post /auth/signup
    ...

  3. // 기존 USER 정보
    {
    "msrl": 1,
    "uid": "test@test.com",
    "name": "test"
    }
    // 표준화한 USER 정보
    {
    "data": {
    "msrl": 1,
    "uid": "test@test.com",
    "name": "test"
    },
    "success": true
    "code": 0,
    "message": "성공하였습니다."
    }


api 결과를 담아낼 결과 모델 생성

  1. api 결과
@Getter
@Setter
public class CommonResult {

    @ApiModelProperty(value = "응답 성공여부 = true/false")
    private boolean success;

    @ApiModelProperty(value="응답 코드 번호")
    private int code;

    @ApiModelProperty(value="응답메시지")
    private String msg;

}
  1. 단일건 api 결과 처리
@Getter
@Setter
public class SingleResult<T> extends CommonResult {
    private T data;
}

  1. 여러건 api 결과 처리
@Getter
@Setter
public class ListResult<T> extends CommonResult {
    private List<T> list;
}

결과 모델을 처리할 서비스 생성

@Service
public class ResponseService {

    public enum CommonResponse {
        SUCCESS(0, "성공"),
        FAIL(-1, "실패");

        int code;
        String msg;

        CommonResponse(int code, String msg) {
            this.code = code;
            this.msg = msg;
        }

        public int getCode() {
            return code;
        }

        public String getMsg() {
            return msg;
        }
    }
    // 단일건 결과 처리
    public <T> SingleResult<T> getSingleResult(T data){
        SingleResult<T> result=new SingleResult<>();
        result.setData(data);
        setSuccessResult(result);
        return result;
    }
    // 다중건 결과 처리
    public <T> ListResult<T> getListResult(List<T> list){
        ListResult<T> result=new ListResult<>();
        result.setList(list);
        setSuccessResult(result);
        return result;
    }
    // 성공 결과만 처리
    public CommonResult getSuccessResult(){
        CommonResult result=new CommonResult();
        setSuccessResult(result);
        return result;
    }
    // 실패 결과만 처리
    public CommonResult getFailResult(int code,String msg){
        CommonResult result=new CommonResult();
        result.setSuccess(false);
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }
    // 성공하면 api 성공 데이터 세팅
    private void setSuccessResult(CommonResult result){
        result.setSuccess(true);
        result.setCode(CommonResponse.SUCCESS.getCode());
        result.setMsg(CommonResponse.SUCCESS.getMsg());
    }

}

Controller에는 기존기능에 위 서비스를 타고 넘어오도록 수정한다.

    @ApiOperation(value="로그인", notes = "이메일을 통해 로그인한다.")
    @PostMapping(value="/login")
    public SingleResult<String> login(@RequestBody @ApiParam(value="이메일 비밀번호",required = true) RequestLogin requestLogin){
        UserDto userDto = userService.login(requestLogin);
        return responseService.getSingleResult(jwtTokenProvider.createToken(String.valueOf(userDto.getEmail()), userDto.getRoles()));
    }

참고
https://github.com/no-4-gift/boot-RESTAPI/blob/master/doc/4.%20REST%20API%20구조%20설계하기.md

0개의 댓글