使用RetrofitAndroid对多个API进行常见成功/失败/错误处理的良好设计

我想以这样一种方式设计 API 调用,以便从一个地方轻松处理成功和失败响应(而不是为所有 API 编写相同的调用函数代码)

以下是我想考虑的场景。

  1. 在一个中心位置处理所有 API 的成功/失败和错误响应,如 4xx、5xx 等。
  2. 想要取消入队请求,并且如果请求已经发送,则在注销的情况下也停止处理响应(因为响应解析会修改应用程序的一些全局数据)
  3. 如果访问令牌已过期并且从云收到 401 响应,它应该获取新令牌,然后使用新令牌自动再次调用 API。

我目前的实现不满足上述要求。有没有办法使用 Retrofit 实现满足上述要求的 API 调用?请为我推荐一个好的设计。

这是我目前的实现:

  1. ApiInterface.java - 它是一个包含不同 API 调用定义的接口。
  2. ApiClient.java - 获取改造客户端对象以调用 API。
  3. ApiManager.java - 它具有调用 API 并解析其响应的方法。

接口接口.java

public interface ApiInterface {

    // Get Devices
    @GET("https://example-base-url.com" + "/devices")
    Call<ResponseBody> getDevices(@Header("Authorization) String token);

    // Other APIs......
}

客户端程序

public class ApiClient {
    
    private static Retrofit retrofitClient = null;
    
    static Retrofit getClient(Context context) {

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                    .sslSocketFactory(sslContext.getSocketFactory(), systemDefaultTrustManager())
                    .connectTimeout(15, TimeUnit.SECONDS)
                    .writeTimeout(15, TimeUnit.SECONDS)
                    .readTimeout(15, TimeUnit.SECONDS)
                    .build();

        retrofitClient = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(okHttpClient)
                .build();
    }
}

接口管理器

public class ApiManager {

private static ApiManager apiManager;

    public static ApiManager getInstance(Context context) {
        if (apiManager == null) {
            apiManager = new ApiManager(context);
        }
        return apiManager;
    }

    private ApiManager(Context context) {
        this.context = context;
        apiInterface = ApiClient.getClient(context).create(ApiInterface.class);   
    }

    public void getDevices(ResponseListener listener) {
        // API call and response handling
    }
    // Other API implementation
}

更新 :

对于第一点,拦截器将有助于根据this全局处理 4xx、5xx 响应。但是拦截器将在 ApiClient 文件中并通知 UI 或 API 调用者组件,需要在回调中传递成功或失败结果我的意思是响应侦听器。我怎样才能做到这一点 ?任何的想法 ?

对于第三点,我对 Retrofit 知之甚少Authenticator。我认为这一点是合适的,但它需要同步调用才能使用刷新令牌获取新令牌。如何对 synchronous 进行异步调用?(注意:此调用不是改造调用)

以上是使用RetrofitAndroid对多个API进行常见成功/失败/错误处理的良好设计的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>