[Android] OkHttp, Retrofit 라이브러리

mingsso·2023년 9월 10일

Android

목록 보기
6/12

1️⃣ OkHttp 라이브러리

안드로이드에서 REST API, HTTP 통신을 간편하게 구현할 수 있도록 다양한 기능을 제공해주는 Java/Kotlin 오픈소스 라이브러리 (Square사 제공)

버전에 따라 사용법이 조금씩 다르기 때문에 공식 홈페이지를 확인하고 사용하자!
https://square.github.io/okhttp/

사용 예시

  1. GET 동기 요청
public boolean getUserInfo(String key) {

	try {
    	String url = "http://127.0.0.1:8080/v1/test/get?key=" + key;
        OkHttpClient client = new OkHttpClient();
        
        // GET 요청을 Request.Builder를 통해 만듦 
        Request.Builder builder = new Request.Builder().url(url).get();
        builder.addHeader("password", "1234");
        
        Request request = builder.build();
        
        // client 객체의 newCall()에 만들어진 request를 전달하고 실행함 
        Response response = client.newCall(request).execute();
        
        // execute() 메소드는 요청에 대한 응답이 올 때까지 기다렸다가 반환 
        if (response.isSuccessful()) {
        	ResponseBody body = response.body();
           	if (body != null) {
            	System.out.println("Response: " + body.string());
            }
        }
        else 
        	System.err.println("Error Occurred");
        
        return true;
    } 
    catch (Exception e) {
    	e.printStackTrace();
        return false;
    }
}       



  1. POST 동기 요청
public boolean postUserInfo() {

	try {
    	String url = "http://127.0.0.1:8080/v1/test/post";
        String postBody = "" + "{" + "\"key\":123," + "\"value\":55323" + "}";
        
        OkHttpClient client = new OkHttpClient();
        
        Request.Builder builder = new Request.Builder().url(url)
        	.addHeader("Password", "1234")
            .pst(requestBody);
        Request request = builder.build();
        
        // 비동기로 요청하려면 execute() 대신 enqueue()를 사용하면 됨 
        Response response = client.newCall(request).execute();
        if (response.isSuccessful()) {
        	ResponseBody body = response.body();
            if (body != null)
            	System.out.println("Response: " + body.string());
        }
        else
        	System.err.println("Error Occurred");
        
        retrun true;
    }
    catch (Exception e) {
    	e.printStackTrace();
        return false;
    }
}



2️⃣ Retrofit 라이브러리

안드로이드에서 REST API, HTTP 통신을 간편하게 구현할 수 있도록 다양한 기능을 제공해주는 Java/Kotlin 오픈소스 라이브러리 (Square사 제공)
OkHttp 라이브러리의 상위 구현체

private const val BASE_URL = "https://android-kotlin-fun-mars-server.appspot.com"

// Retrofit 객체 생성
private val retrofit = Retrofit.Builder()
    .addConverterFactory(ScalarsConverterFactory.create())
    .baseUrl(BASE_URL)
    .build()


interface BankApiService {
    // 서버에서 응답 문자열을 가져옴
    // Retrofit에 GET 요청임을 알리고 이 웹 서비스 메서드의 엔드포인트를 지정함(반환 유형 String)
    @GET("photos")
    fun getInfo(): String
}

// 공개 객체 BankApi 정의 (앱의 나머지 부분에서 액세스할 수 있는 공개 싱글톤 객체)
object BankApi {
    val retrofitService : BankApiService by lazy {
        retrofit.create(BankApiService::class.java) }
}

서버에 이미지나 오디오 파일을 전송할 때는 Multipart를 사용함
Multipart는 File 객체(이미지, 오디오 파일 등)인 것과 아닌 것(문자열, 숫자) 등을 모두 서버에 전송할 수 있음

interface LoginApi {
    @Multipart
    @POST("login")
    fun signUpAccount(
        @Part imageFile: MultipartBody.Part?
    ) : Single<LoginResponse>
}



참고자료

https://jade314.tistory.com/entry/Android-Library-OKHttp-http
https://developer.android.com/codelabs/basic-android-kotlin-training-getting-data-internet?hl=ko#0
https://github.com/square/retrofit
https://square.github.io/retrofit/
https://smashandroid.tistory.com/11

profile
🐥👩‍💻💰

0개의 댓글