Lucky Dog

[안드로이드] Retrofit2 Multiple base url 본문

안드로이드

[안드로이드] Retrofit2 Multiple base url

Poohya 2019. 5. 24. 18:04

Retrofit2 Multiple base url

Retrofit 에서 여러 개의 base url을 사용해야 하는 경우 아래와 같이 처리한다.

RetrofitManager

public class RetrofitManager {
    private static final String TAG = RetrofitManager.class.getSimpleName();

    private static HttpLoggingInterceptor logging =
            new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY);

    private static class LazyHolder {
        static final RetrofitManager INSTANCE = new RetrofitManager();
    }

    private Server1Interface server1Interface;
    private Server2Interface server2Interface;

    public Server1Interface getServer1Interface(String url) {
        OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder();
        okHttpBuilder.addInterceptor(logging);
        okHttpBuilder.connectTimeout(15, TimeUnit.SECONDS);
        okHttpBuilder.readTimeout(15, TimeUnit.SECONDS);
        okHttpBuilder.writeTimeout(15, TimeUnit.SECONDS);
        okHttpBuilder.retryOnConnectionFailure(true);
        OkHttpClient okHttpClient = okHttpBuilder.build();

        server1Interface = new Retrofit.Builder()
                .baseUrl(url)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.createAsync())
                .addConverterFactory(GsonConverterFactory.create())
                .client(okHttpClient)
                .build()
                .create(Server1Interface.class);
        return server1Interface;
    }

    public Server2Interface getServer2Interface(String url) {
        OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder();
        okHttpBuilder.addInterceptor(logging);
        okHttpBuilder.connectTimeout(30, TimeUnit.SECONDS);
        okHttpBuilder.readTimeout(30, TimeUnit.SECONDS);
        okHttpBuilder.writeTimeout(30, TimeUnit.SECONDS);
        okHttpBuilder.retryOnConnectionFailure(true);
        OkHttpClient okHttpClient = okHttpBuilder.build();

        server2Interface = new Retrofit.Builder()
                .baseUrl(url)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.createAsync())
                .addConverterFactory(GsonConverterFactory.create())
                .client(okHttpClient)
                .build()
                .create(Server2Interface.class);
        return server2Interface;
    }

    public static RetrofitManager getInstance() {
        return LazyHolder.INSTANCE;
    }
}

Server1Interface

    @POST("/a/alpha")
    Observable<ResponseModel.Serv1Model> getData(@Body String body);
}

Server2Interface

    @POST("/b/bravo")
    Observable<ResponseModel.Serv2Model> getData(@Body String body);
}

USAGE

// Server 1
Server1Interface server1Interface = RetrofitManager.getInstance().getServer1Interface();
Observable<ResponseModel.Data1> observable = server1Interface.getData(param);
Disposable serv1Disposable = observable
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(resp -> {
                    // response handling
                },
                e -> {
                    // error handling
                }
        );

// Server 2
Server2Interface server2Interface = RetrofitManager.getInstance().getServer2Interface();
Observable<ResponseModel.Data2> observable = server2Interface.getData(param);
Disposable serv2Disposable = observable
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(resp -> {
                    // response handling
                },
                e -> {
                    // error handling
                }
        );
Comments