본문 바로가기
Web API

[웹 API] Retrofit이란?

by happyhelen 2021. 11. 1.

프로젝트 중에 오픈 API 로 데이터를 받아서 사용해야 하는 상황이 생겨서 최근 많이 사용된다는 Retrofit 을 공부했다

 

Retrofit은 네트워크로부터 전달된 데이터를 원하는 형태객체로 받을 수 있는 HttpClient Library이다

 

 

 

 

1. 의존성 추가(gradle)

여기서 converter-jackson 은 아래에서 사용할 JacksonConverterFactroy 의존성이다

 

 

 

 

2. 인터페이스에 HTTP API 명세를 기술

 

retrofit 은 interface 에 기술된 명세를 HTTP API 로 전환해주므로 interface에 요청할 API의 명세를 기술한다

 

'명세'를 기술한다는 것은 '요청할 주소'를 기술한다는 것이고, 아래의 servicekey는 직접 받아와야 한다

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;

public interface SeoulAirQualityApi {

    String servicekey = "비공개키";
    @GET(servicekey + "/json/DailyAverageCityAir/1/25/{date}")
    Call<SeoulAirQualityApiDtoIn.GetAirQualityResponse> getAirQuality(@Path("date") String date);
}

GET, POST, DELETE, PUT 중 원하는 방식의 요청과 명세를 Retrofit 어노테이션(@GET)과 함께 기술하되

 

URL의 스킴, 프로토콜, 호스트번호, port 번호는 제외하고 입력한다

 

반환은 Call<요청할 데이터의 객체타입> 의 형태로 기술하고, 메소드는 어떻게 데이터를 받아올지를 따로 구현한다

 

 

 

 

3. 인터페이스 구현

 

@Slf4j 
@Component 
public class SeoulAirQualityApiCaller implements KoreaAirQualityApiCaller {
   
    private final SeoulAirQualityApi seoulAirQualityAPI;

    public SeoulAirQualityApiCaller(@Value("${api.Seoul.baseUrl}") String baseUrl){
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        
        Retrofit retrofit = new Retrofit.Builder()
        	.baseUrl(baseUrl)
                .addConverterFactory(JacksonConverterFactory.create(objectMapper))
                .build();
        
        this.seoulAirQualityAPI = retrofit.create(SeoulAirQualityApi.class);
    }

우선 Json 으로 받아온 데이터를 Java 에서 사용할 수 있게 역직렬화(Deserialization) 하기 위해


직접 파싱하지 않고도 편리하게 직렬화 or 역직렬화 할 수 있는 ObjectMapper 객체를 생성한다

 

그리고 ObjectMapper 에 Feature 를 configure 하는데, 여러가지 Feature 중 여기서는 Json->Object(역직렬화) 변환시

 

존재하지않는 property가 있는경우에도 fail 하지 않게하는 특징을 configure 한다

 

마지막으로 retrofit 인스턴스를 이용해 retrofit 과 interface 연결하면 된다

 

 

 

Retrofit은 네트워크에서 전달된 데이터를 필요한 형태의 객체로 받게해주는 library로 아래의 기본적인 사용 형태를

 

응용하였다

 

아래는 GsonConverterFactory 를 이용했지만 나는 JacksonConverterFactory 를 이용했다

 .baseUrl(요청할 서버의 기본URL)


 .addConverterFactory() : Json->POJO클래스 형식으로 자동변환하는 데이터파싱 converter 추가, json 형태로

 

데이터 변환기능 제공

 

 

 

 

참고사이트) http://devflow.github.io/retrofit-kr/

 

Retrofit - 한글 문서

A type-safe HTTP client for Android and Java

devflow.github.io

참고사이트) https://galid1.tistory.com/617

 

Java - Retrofit이란? (retrofit 사용법 자세한 설명)

1. Retrofit이란 BackEnd 또는 FrontEnd 를 개발하다보면 거의 필수적으로, 다른 서버에 데이터를 요청할 일이 생기게 됩니다. 특히나 FrontEnd 의 경우에는 서버로부터 데이터를 받아와 출력하는 경우가

galid1.tistory.com

참고사이트) https://soulduse.tistory.com/22

 

[Java-lib] Object Mapper에 대해서

Object Mapper 라이브러리 사용관련 자료 조사 며칠전 아는형님의 소개로 Object Mapper에 대해 알게 되었다. 그동안 JSON값 활용을 위해 직접 파싱을 하고 인터페이스를 만드는등 번거로운 노가다(?) 작

soulduse.tistory.com

 

'Web API' 카테고리의 다른 글

[웹 API] JSON 과 XML  (0) 2021.09.11