Я использую модификацию в своем проекте, и мне интересно, есть ли способ разделить вызовы API на разные классы, например: Только активность входа /api/users/login Только активность фильмов /api/movies/all I have все на одном и том же интерфейсе, и я вижу, что это не очень хороший подход ... не могли бы вы подсказать мне, как сделать его чище, пожалуйста? Я использую архитектуру MVP, чтобы сделать ее чистой.
Это мой NetworkService.class
public class NetworkService {
private NetworkAPI networkAPI;
private OkHttpClient okHttpClient;
private LruCache<Class<?>, Observable<?>> apiObservables;
public NetworkService() {
this(BASE_URL);
}
public NetworkService(String baseUrl) {
okHttpClient = buildClient();
apiObservables = new LruCache<>(10);
Gson gson = new GsonBuilder()
.setLenient()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
.create();
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
// set your desired log level
//logging.setLevel(Level.BASIC);
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
Builder httpClient = new Builder()
.connectTimeout(100, TimeUnit.SECONDS)
.readTimeout(100, TimeUnit.SECONDS);
httpClient.addInterceptor(logging);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(httpClient.build())
.build();
networkAPI = retrofit.create(NetworkAPI.class);
}
/**
* Method to return the API interface.
*
* @return
*/
public NetworkAPI getAPI() {
return networkAPI;
}
/**
* Method to build and return an OkHttpClient so we can set/get
* headers quickly and efficiently.
*
* @return
*/
public OkHttpClient buildClient() {
Builder builder = new Builder();
builder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(chain.request());
// Do anything with response here
//if we want to grab a specific cookie or something..
return response;
}
});
builder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
//this is where we will add whatever we want to our request headers.
Request request = chain.request().newBuilder().addHeader("Accept", "application/json").build();
return chain.proceed(request);
}
});
return builder.build();
}
/**
* Method to clear the entire cache of observables
*/
public void clearCache() {
apiObservables.evictAll();
}
}
И у моего NetworkAPI.class
есть это
public interface NetworkAPI {
@POST(LOGIN)
Call<LoginResponse> login(@Body LoginRequest loginRequest);
//And more calls...
}
Вы знаете, ребята, если я могу сделать это чище?