如何包装基于Clean Architecture的API响应以处理成功和错误? [英] How to wrap API responses to handle success and error based on Clean Architecture?

查看:73
本文介绍了如何包装基于Clean Architecture的API响应以处理成功和错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

What is the approach to wrapping responses from the server and then process? The API is returning responses in the following format:

成功:

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

失败:

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

我正在尝试将干净体系结构"原理应用于我的应用程序,我想知道如何包装响应以更好地处理错误?

I'm trying to apply Clean Architecture principles to my application and I want to know how can I wrap the responses to better handle errors?

推荐答案

  1. fillCities()调用getCities()
  2. getCities()调用getCityList()
  3. getCities通过funcErrorCheckAndTransform处理来自getCityList端点的响应,并将可观察到的返回给演示者层

  1. fillCities() calls getCities()
  2. getCities() calls getCityList()
  3. getCities processes the response that comes from getCityList endpoint through funcErrorCheckAndTransform and returns back an observable to presenter layer

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)
            }
        ))
  }

这篇关于如何包装基于Clean Architecture的API响应以处理成功和错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆