day20(5/18) TIL
day20 느낀점
오늘은 조금 정신이 없는 하루였다. 그러다보니 집중을 제대로 하지 않은 것 같아 아쉬움이있다. 근데 뭐 이런 날도 있는거지... 내일은 2배로 열심히 해야겠다~^*^
오늘은 retrofit 라이브러리를 이용하여 api 통신하는 부분을 정리했다.
두 대 이상의 컴퓨터를 케이블 또는 인터넷으로 연결해 네트워크를 구성하는 것을 말함
Retrofit 라이브러리를 사용하면 API 접근을 보다 쉽게 만들어준다.
각종 에러 처리도 쉽고, 가독성도 좋다.
dependencies {
...
// retrofit
implementation "com.squareup.retrofit2:retrofit:2.9.0"
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.google.code.gson:gson:2.9.0'
}
만약 최신 버전이 있다면 버전을 올려야한다.
gson은 retrofit으로 얻은 직렬화된 json 데이터를 자바 객체로 다시 직렬화 혹은 역 직렬화 해주는 자바 라이브러리이다. 이것은 서버에서 데이터를 받아오면서 또 그것을 자바에서 사용할 수 있도록 해주므로 필수이다.
public class RetrofitClient {
//BASE_URL에는 변하지 않는 URL주소를 입력. 데이터의 위치에 따라 변하지 않는 주소
private static final String BASE_URL = "https://reqres.in/";
public static RetrofitService getApi() {
return getInstance().create(RetrofitService.class);
}//getInstance 메소드를 통해 인스턴스를 반환하게됩니다.
private static Retrofit getInstance() {
Gson gson = new GsonBuilder().setLenient().create(); //통신을 할 때 JSON 사용 및 해당 객체로의 파싱을 위해 생성
return new Retrofit.Builder().baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();//서버에서는 JSON으로 응답하므로 우리는 build.gradle에 설정한 gson을 이용
}
}
getInstance 메소드를 통하여 클래스의 instance를 생성한다. getApi에서 생성할 인터페이스인 RetrofitService까지 넣어주며 Retrofit 사용준비를 마친다.
public interface RetrofitService {
@GET("/api/users/") //가져올 특정 api 주소
Call<Object> getUsers(@Query("page") int page);
}
@GET("/api/users/"): 가져올 데이터 주소, 만약 Open API를 사용한다면 지침을 따르면 된다.
Call: 반환 받을 타입, 만약 특정 클래스로 정의해야한다면 dto 클래스를 정의해주고 이를 넣어주어야한다.
@Query: 쿼리를 이용하면, 특정 데이터만 가져올 수 있다. 쿼리문을 이용하면 ?와 함께 조건문이 생기면서 요청이 users?page=2 이런 형식으로 바뀜
+참고사항
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId);
참고한 좋은 블로그들
https://velog.io/@seokzoo/Retrofit-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0
https://daldalhanstory.tistory.com/275