[Project Glue] 어떻게 Rest API를 썼을까? (상)
728x90
반응형

ㅇㅋ. Rest API를 왜 쓰는지는 알겠다 이거야.

그렇다면 난 지난 프로젝트에서 어떻게 썼을까?


많은 기능 중 하나을 예를 들어서 설명을 해 보도록 하겠다.

Glue라는 서비스는 친구들끼리 사진을 공유하는 SNS형 사진첩이다.

이때 SNS 기능이 있어서 그룹을 만들 수 있는데

그 그룹을 만드는 기능을 기준으로 설명해 보겠다.


아래는 MVP 모델을 적용한 소스 중 AddGroupPresenter이다.

각 소스별로 중요한 부분은 노란색으로 표시하였다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
import android.graphics.Bitmap;
 
public interface AddGroupPresenter {
    void setView(AddGroupPresenter.View view);
    Bitmap imgAddGroupReSizing(String path);
    void addGroupSave(Bitmap bitmap, String groupName);
 
    // setView로 부르기 위해 임시로 만든 View
    public interface View {
        void progressAddGroupShow(boolean status);
        void addGroupResult(int code);
        void addGroupFinish();
    }
}
cs


먼저 만들고자 하는 기능을 선언하였다.

addGroupSave 함수에서 이미지와 그룹 이름을 받아서 그룹을 추가할 것이다.


그리고 아래는 이를 구체화한 AddGroupPresenterImpl이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.DisplayMetrics;
import android.util.Log;
import android.widget.Toast;
 
import com.hm.project_glue.main.home.data.HomeData;
import com.hm.project_glue.util.Networking;
import com.hm.project_glue.util.http.ListRestAdapter;
 
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Map;
 
import okhttp3.MediaType;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
cs


아는 사람은 단번에 이해하겠지만

가장 중요한 부분은 18~22번 라인이다.

API는 문서일 뿐이고 이를 사용하기 위해서는 라이브러리로 끌어와야 하는데

안드로이드를 공부하면서 가장 많이 쓰는 라이브러리가 바로 okhttp와 retrofit이다.

retrofit : REST API통신을 위한 Android/JAVA 라이브러리

정승욱님 블로그 : OkHttp 의 상위 수준 라이브러리로써 Annotation 기반으로 RESTFul Http 요청이 가능하도록 해줍니다.

관련 자료 : http://okky.kr/article/352608

그럼 이 라이브러리로 어떻게 구현했을까?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class AddGroupPresenterImpl implements AddGroupPresenter {
    private static final String TAG = "AddGroupPresenterImpl";
    private Context context;
    AddGroupPresenter.View view;
    ProgressDialog progress;
 
    public AddGroupPresenterImpl(Context context) {
        this.context = context;
    }
 
    @Override
    public void setView(View view) {
        this.view = view;
    }
    /** imgAddGroupReSizing 구현 **/
    /** addGroupSave 구현 **/
}
cs


크게 봤을 때, 가장 중요한 부분은 addGroupSave 부분이다.

금방 이해하겠지만 그룹을 추가하기 위한 메서드이다.

위 addGroupSave를 더 자세히 다뤄보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Override
public void addGroupSave(Bitmap bitmap, String groupName) {
    progress = new ProgressDialog(context);
    progress.setMessage("Upload....");
    progress.setProgressStyle((ProgressDialog.STYLE_SPINNER));
    progress.setCancelable(false);
    progress.show();
    String authorization = "Token "+ Networking.getToken();
    String fileName="photo_"+groupName+".jpg";
    Map<String, RequestBody> imgMap = new HashMap<>();
    // 그룹 이미지 세팅
    if(bitmap!=null){
        /** 생략 **/
    }
    imgMap.put("group_name",RequestBody.create(
        MediaType.parse("multipart/form-data"), groupName));
    
    /** Call<HomeData> 구현 **/
}
cs


로딩을 위한 progress를 구현하고 API 인증을 위한 토큰을 받을 변수를 선언한다.

API 인증 방식으로 토큰 방식을 썼고 로그인 후 받게되는 유효한 토큰으로 호출을 한다.

자세한 설명은 조대협씨 슬라이드 쉐어를 참고하면 좋다. (조대협씨 블로그에도 같은 내용이 있다.)

그 아래는 이미지 세팅인데 오늘은 REST api 위주로 학습하기로 했으니 생략한다.

이제 정말 중요한 Call 부분을 학습해보도록 하자.


728x90
반응형