자. 앞 얘기를 계속해보자.
1 2 | final Call<HomeData> response = ListRestAdapter.getInstance().createGroupData(authorization, imgMap); | cs |
하나씩 살펴보자. ( AddGroupPresenterImpl.java )
위 소스에서 네트워크를 연결한다. 그렇다면 createGroupData를 이해해야한다.
아래는 ListRestAdapter 소스이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | public class ListRestAdapter { /** 생략 **/ private static OkHttpClient client; private static IServerData service; public synchronized static IServerData getInstance(){ if(service == null) { // 통신 로그를 확인하기 위한 interceptor 설정 HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); // OK HTTP 설정 // SSL 통한 서버연결인 경우 인증서가 없으면 통신자체가 안된다. // 이럴 경우 우회하기 위한 인증서를 무시하는 셋팅. client = configureClient(new OkHttpClient().newBuilder()) .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS) .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS) .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS) .cookieJar(new JavaNetCookieJar(manager)) //쿠키 저장 .addInterceptor(interceptor) // 로그를 출력(디버깅용) .build(); // Retrofit 설정 service = new Retrofit.Builder() .baseUrl(Networking.getBASE_URL()) .client(client) // json 응답 변환. Json Parser 추가 .addConverterFactory(GsonConverterFactory.create()) .build().create(IServerHomeData.class); //인터페이스 연결 } return service; } /** OkHttpClient.Builder **/ } | cs |
위 getInstance가 통신을 하기 위한 세팅을 한다.
service가 createGroupData를 인터페이스에서 부른다.
이 인터페이스는 IServerHomeData에 구현되어 있다.
IServerHomeData에 구현된 createGroupData는 아래와 같다.
1 2 3 4 5 6 7 | // 구룹 생성 @Multipart @POST("/group/group_list/") Call<HomeData> createGroupData( @Header("Authorization") String authorization, @PartMap Map<String, RequestBody> group_image ); | cs |
여기서 나온다. Rest API를 구성하는 세가지.
자원(RESOURCE) - URI : /group/group_list/
행위(Verb) - HTTP METHOD : @POST
표현(Representations) : 그 아래 전부
Multipart에 관해서는 retrofit api 문서(한글)를 참고하도록 하자.
이렇게 service를 통해 서버에 접근을 하게 된다.
이렇게 서버에 접근할 수 있는 Call 객체를 만들고 나면 Callback을 구현해야한다.
다시 구현 소스를 살펴보자. ( AddGroupPresenterImpl.java )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | final Call<HomeData> response = ListRestAdapter.getInstance().createGroupData(authorization, imgMap); response.enqueue(new Callback<HomeData>() { @Override public void onResponse(Call<HomeData> call, Response<HomeData> response) { view.addGroupResult(response.code()); if(response.isSuccessful()){ Toast.makeText(context, "Add Group : Successful", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "Add Group : Fail", Toast.LENGTH_SHORT).show(); } view.addGroupFinish(); progress.dismiss(); } @Override public void onFailure(Call<HomeData> call, Throwable t) { view.addGroupFinish(); progress.dismiss(); } }); | cs |
Call 객체가 수행한 enqueue은 비동기식으로 사용하기 위한 메서드 입니다. (realm 홈페이지 참고)
이 메서드에 딸려오는 onResponse와 onFailure.
각각 응답에 성공했을 때와 실패했을 때 수행할 일을 정의하면 된다. (태환님 블로그 참고)
addGroupResult는 상태 코드를 받아와서 체크하는 것이다. (200, 404, 500 등)
이렇게 그룹 추가 요청을 하게 된다.
다른 식으로 Rest API를 설명한 자료는 아래에 링크로 남겼다.
참고가 되길 바란다.
(정말 유레카 같은 자료들. 모두 정독하길 추천!!)
mizzo 블로그 : https://goo.gl/kPTPr6
이대엽님 번역 글 : https://goo.gl/ODXGQv
NHN엔터테인먼트 기술블로그 : http://meetup.toast.com/posts/92
fresco : https://goo.gl/NSS8xV
'Android, iOS' 카테고리의 다른 글
setFocusable. 키보드에도 관심을 가져줄 때. (0) | 2017.01.30 |
---|---|
[Project Glue] Rest API와 로그인 체크 (0) | 2017.01.24 |
[Project Glue] 어떻게 Rest API를 썼을까? (상) (0) | 2017.01.18 |
저장소 옵션이란게 있다고 합니다 (0) | 2017.01.18 |
[Project Glue] Rest API가 신경쓰여요 (0) | 2017.01.18 |
Comment