Back-end/TIL

API & Response Body 형태 구성

sw_develop 2022. 4. 13. 09:24

스타트업 백엔드 인턴으로 근무하여 배운 내용을 까먹지 않기 위해 정리하는 글입니다.

 

# API 형태 구성

  • API 반환 값은 Json Object (Key, Value)로 구성하는 것이 좋다. 그래야 프론트에서도 (Key, Value)로 접근하기 편리하고, 확장성도 좋다.
  • 응답 코드도 함께 반환해주는 것이 좋다. 응답 메시지는 변경될 가능성이 크기 때문에 프론트에서 처리할 때 응답 코드로 처리하는 것이 훨씬 편하다. 

 

느낀점

파피메일 프로젝트를 할 때는 응답 메시지만 다르게 반환해서 프론트에서 구별해주셨는데 미안한 마음이 들었다. 다음 프로젝트 때는 응답 코드도 필수로 반환하도록 개선해야겠다.

 

# Response Body 형태

응답 코드, 응답 메시지를 포함한 통일된 응답 형태로 반환하기 위해 ResponseService 클래스를 만들어 기본 틀을 구성해둔다.

@Service
public class ResponseService {

	...

    /**
     * enum으로 api 요청 결과에 대한 code, message를 정의합니다.
     */
    @Getter
    @AllArgsConstructor
    public enum CommonResponse {
        SUCCESS(0, "성공하였습니다."),
        FAIL(-1, "실패하였습니다."),
        SMS_SEND(1000, "입력하신 전화번호로 인증번호가 발송되었습니다."),
        SMS_PHONE_AUTH_SUCCESS(1010, "인증이 완료되었습니다.");

        int code;
        String msg;
    }

    /**
     * 단일건 결과를 처리하는 메소드
     */
    public <T> SingleResult<T> getSingleResult(T data) {
        SingleResult<T> result = new SingleResult<>();
        result.setData(data);
        setSuccessResult(result);
        return result;
    }

    /**
     * 다중건 결과를 처리하는 메소드
     * @param list
     * @param <T>
     * @return
     */
    public <T> ListResult<T> getListResult(List<T> list) {
        ListResult<T> result = new ListResult<>();
        result.setList(list);
        setSuccessResult(result);
        return result;
    }

    /**
     * 성공 결과만 처리하는 메소드
     * @return
     */
    public CommonResult getSuccessResult() {
        CommonResult result = new CommonResult();
        setSuccessResult(result);
        return result;
    }

    /**
     * 실패 결과만 처리하는 메소드
     * @return
     */
    public CommonResult getFailResult(int code, String msg) {
        CommonResult result = new CommonResult();
        result.setSuccess(false);
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }

    /**
     * 결과 모델에 api 요청 성공 데이터를 세팅해주는 메소드
     * @param result
     */
    private void setSuccessResult(CommonResult result) {
        result.setSuccess(true);
        result.setCode(CommonResponse.SUCCESS.getCode());
        result.setMsg(CommonResponse.SUCCESS.getMsg());
    }

    private void setFailResult(CommonResult result) {
        result.setSuccess(false);
        result.setCode(CommonResponse.FAIL.getCode());
        result.setMsg(CommonResponse.FAIL.getMsg());
    }
	
    ...
}

 

🎈참고

REST API 구조 설계하기