کلاس RServiceGenerator
حتماً میدونید که شئ Retrofit و سازندهی اون، قلب هر درخواستی هستن که توسط اونها شما تنظیمات رو انجام میدین و درخواستهاتون رو آماده میکنین، فرمت پاسخها رو مشخص میکنین، اعتبارسنجی، احراز هویت، گزارشگیری و مدیریت خطاها و... رو مدیریت میکنید.
متأسفانه توسعهدهندگان بسیاری رو دیدم که فقط این بخشها رو Copy/Paste میکنن، بجای اینکه اونها رو در یک کلاس تمیز و مجزا قرار بدن. کلاس ServiceGenerator ما قراره راهحل این مشکل شما باشه که براساس ایدهی
Bart Kiers طراحی شده.
اجازهبدین با کد ساده شروع کنیم. این کد فعلاً فقط یک متد برای ایجاد یک کلاینت سادهی REST برای کلاس/رابط ارائهشده عمل میکنه که درنهایت یک کلاس سرویس رو برای اون رابط برمیگردونه:
public class ServiceGenerator {
private static final String BASE_URL = "https://api.github.com/";
private static Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder().setLenient().create()));
private static Retrofit retrofit = builder.build();
private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
public static <S> S createService(Class<S> serviceClass) {
return retrofit.create(serviceClass);
}
}
همونطور که میبینید، کلاس ServiceGenerator از کلاس سازندهی Retrofit برای ایجاد یک کلاینت REST جدید باکمک API ارائهشده در نشانی که با BASE_URL مشخصشده، استفاده کرده. برای مثال، ما از API سایت GitHub استفاده کردیم که بهوضوح شما باید اون رو با URL موردنظر خودتون برای API جایگزین کنید.
متد createService یک پارامتر serviceClass میگیره که همون رابط حاشیهنویسیشدهی شما برای درخواستهای API هست. خروجی این متد هم یک شئ از کلاسی هست که میتونین متدهای تعریفشده داخل رابطتون رو ازطریق اون فراخوانی کنید.