1. 출력 파라미터는 ApiResponse<Map<String, Object>>로 통일하여 다양한 오브젝트 리턴 가능 토록 한다.
2. 입력 파라미터는 통일 안하는게 더 나을거 같다.
- 조회에는 페이지와 페이지별 사이즈 필요
- 입력/업데이트에는 입력값 담은 DTO와 첨부 파일 처리를 위해 Multipart 사용
- 삭제에는 패스 변수를 통해 id만 전달
3. /api/* URL에 대해서는 모두 헤더에 있는 토큰을 검증하여 보안 강화
※ 단, 토큰을 얻을 때는 아직 토큰이 없으므로 제외
1. 아이디어 조회 API 스펙 :
1. 호출 주소 : http://193.123.233.105:8080/api/idea/list
5. 입력 파라미터 :
1) @Header("Authorization") String authToken
※ /api/* URL에 대해 Filter를 통해 jwtToken 검증 하도록 하여 보안 강화
※ 이미지 보안 강화를 위해서도 사용하고 있음.
아무나 이미지 다운 받지 못하고 유효한 토큰을 헤더에 포함해야만 이미지 조회 가능.
2) @Body IdeaListRequest ideaListRequest
※ IdeaListRequest :
private int page;
private int size;
6. 출력 파라미터 :
1) Single<ApiResponse<Map<String, Object>>>
※ <ApiResponse<Map<String, Object>>> 대신 ApiResponse<List<IdeaDTO>>를 사용하면 소스가 훨씬 간결해 지지만,
향후 확장성 고려하여 추가 파라미터를 있을 수 있으므로 List<IdeaDTO>로 한정 하지 않고 Map<String, Object>를 사용함.
※ Single은 복잡한 비동기 작업이나 여러 이벤트를 처리해야 하는 경우 유용
※ Call은 RxJava를 사용하지 않고도 사용할 수 있으며, 단순한 API 호출에 유용
※ ApiResponse<T> :
private boolean success;
private String errorMessage;
private T data;
7. Exception 처리 :
1) 인증서 오류 발생 시 : GlobalExceptionHandler에서 ApiResponse에 실패 응답 담아 리턴
2. 아이디어 저장/업데이트 API 스펙 :
1. 호출 주소 : http://193.123.233.105:8080/api/idea
2. 입력 파라미터 :
1) @Header("Authorization") String authorization
2) @Part List<MultipartBody.Part> files
※ 첨부 파일 이미지 전송, 여러 이미지 첨부 가능
3) @Part("idea") IdeaDTO ideaDTO
※ 첨부 파일 이외 아이디어 데이터
4. 출력 파라미터 :
1) Call<ApiResponse<Map<String, Object>>>
5. Exception 처리 :
1) 인증서 오류 발생 시 : GlobalExceptionHandler에서 ApiResponse에 실패 응답 담아 리턴
3. 아이디어 삭제 API 스펙 :
1. 호출 주소 : http://193.123.233.105:8080/api/idea/{ideaId}
2. 입력 파라미터 :
1) @Header("Authorization") String authToken
2) @Path("ideaId") String ideaId
3. 출력 파라미터 :
1) Call<ApiResponse<Map<String, Object>>>
4. Exception 처리 :
1) 인증서 오류 발생 시 : GlobalExceptionHandler에서 ApiResponse에 실패 응답 담아 리턴
0. 결론
1. 아이디어 조회 API 스펙 :
2. 아이디어 저장/업데이트 API 스펙 :
3. 아이디어 삭제 API 스펙 :