چند Base Url

پرسیده شده
فعالیت 1411 روز پیش
دیده شده 942 بار
0

سلام اگر چند تا api مختلف داشته باشیم که مثلا خبر انگلیسی رو از گوگل نیوز بگیره و خبر فارسی را از خبرگزاری داخلی.

چطوری باید api service پیاده سازی کنیم؟

 

فایل پیوست

علی خدری
علی خدری

31 خرداد 99

0
حذف شده

سلام خدمت شما یک کلاس به اسم ApiServiceProvider می‌سازیم

و داخلش دو متد که یکیش برای فارسی هست و دیگری برای انگلیسی.

بعد جایی که می‌خوایم استفاده کنیم از هر کدوم که مد نظرمون هست استفاده می کنیم.

 

فایل پیوست

وحید گروسی

توسط

وحید گروسی

31 خرداد 99

حذف شده
این که مشخصه.بحث سر پیاده سازی رتروفیت هست. می خوام بدونم برای پیاده سازی رتروفیت وقتی که url های مختلفی داریم و base url مشترکی وجود نداره باید آنموقع برای هر api دوباره بیاییم رتروفیت رو بسازیم یا راه حل ساده تری وجود داره ؟
علی خدری

2 تیر 99

حذف شده
این که مشخصه.بحث سر پیاده سازی رتروفیت هست. می خوام بدونم برای پیاده سازی رتروفیت وقتی که url های مختلفی داریم و base url مشترکی وجود نداره باید آنموقع برای هر api دوباره بیاییم رتروفیت رو بسازیم یا راه حل ساده تری وجود داره ؟
علی خدری

2 تیر 99

1
حذف شده

سلام علی جان مشخصاً همه چیز دست خودته میتونی جدا جدا بسازی یا نه یه اینستنس نگه داری کنی و طبق نیازت ازش استفاده کنی من که همیشه داخل هر متد یه بار نمونه گرفتم و مشکلی نداشته مثل کد زیر:

object ApiServiceContainer {
    private var apiService: ApiService? = null
    private var authenticationApiService: AuthenticationApiService? = null

    fun getApiService(): ApiService {
        if (apiService == null) {
            val retrofit = Retrofit.Builder()
                .baseUrl(EndPoints.API_BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build()
            apiService = retrofit.create(ApiService::class.java)
        }
        return apiService!!
    }

    fun getAuthenticationApiService(): AuthenticationApiService {
        if (authenticationApiService == null) {
            val retrofit = Retrofit.Builder()
                .baseUrl(EndPoints.Authentication_API_BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build()
            authenticationApiService = retrofit.create(AuthenticationApiService::class.java)
        }
        return authenticationApiService!!
    }
}

نمونه پیشرفته ترشم میشه مثل زیر منتهی اینجا فقط یه url دارم:

object ApiServiceContainer {
    private var apiService: ApiService? = null
    fun getApiService(): ApiService {
        if (apiService == null) {
            val logging = HttpLoggingInterceptor()
            logging.level = HttpLoggingInterceptor.Level.BODY
            val httpClient = OkHttpClient.Builder()
            httpClient.addInterceptor { chain ->
                val original = chain.request()
                // Request customization: add request headers
                val requestBuilder = original.newBuilder()
                    .header("Authorization", "Bearer " + token) // <-- this is the important line
                    .header("Accept", "application/json")
                    .header("Content-Type", "application/json")
                val request = requestBuilder.build()
                chain.proceed(request)
            }
            httpClient.connectTimeout(30, TimeUnit.SECONDS)
            httpClient.readTimeout(30, TimeUnit.SECONDS)
            httpClient.addNetworkInterceptor(logging)
            val okHttpClient = httpClient.build()
            val gson = GsonBuilder()
                .setLenient()
                .create()
            val retrofit = Retrofit.Builder()
                .baseUrl(EndPoints.API_BASE_URL)
                .addConverterFactory(
                    GsonConverterFactory.create(gson))
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(okHttpClient)
                .build()
            apiService = retrofit.create(ApiService::class.java)
        }
        return apiService!!
    }
}

 

فایل پیوست

وحید گروسی

توسط

وحید گروسی

3 تیر 99