如何包装API响应以处理基于干净架构的成功和错误



包装服务器响应然后进行处理的方法是什么?API以以下格式返回响应:

成功:

{
"data": [],
"statusCode": 200,
"statusMessage": "Operation success",
"success": true
}

故障:

{
"errors": [],
"statusCode": 500,
"statusMessage": "Something went wrong",
"success": false
}

我正在尝试将Clean Architecture原则应用于我的应用程序,我想知道如何包装响应以更好地处理错误?

  1. fillCities((调用getCities(
  2. getCities((调用getCityList((
  3. getCities通过funcErrorCheckAndTransform处理来自getCityList端点的响应,并返回一个可观察到的呈现层

    fun <T> funcErrorCheckAndTransform(): (BaseResponse<T>) -> Observable<T> {
    return { response ->
    if (response.isSuccess) {
    Observable.just(response.data)
    } else {
    val e = Exception(response.errorMsg)
    Timber.e(e)
    Observable.error(e)
    }
    }
    }
    
    override fun getCities(): Observable<out Cities> {
    return locationService.getCityList()
    .subscribeOn(schedulerProvider.io())
    .flatMap(funcErrorCheckAndTransform())
    .observeOn(schedulerProvider.ui())
    }
    
    @GET("getcitylist")
    fun getCityList():
    Observable<BaseResponse<ProfileResponse.Cities>>
    
    override fun fillCities(defaultCityName: String?) {
    view.showProgress(R.string.cities_are_getting_dialog_message)
    compositeDisposable.add(
    interactor.getCities().subscribe(
    {
    view.hideProgress()
    view.fetchCities(it, defaultCityName)
    },
    { error ->
    view.onError(error)
    }
    ))
    }
    

最新更新