【问题标题】:How to wrap API responses to handle success and error based on Clean Architecture?如何包装 API 响应以处理基于 Clean Architecture 的成功和错误?
【发布时间】:2019-01-07 12:46:58
【问题描述】:

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

成功:

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

失败:

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

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

【问题讨论】:

    标签: android json kotlin retrofit clean-architecture


    【解决方案1】:
    1. fillCities() 调用 getCities()
    2. getCities() 调用 getCityList()
    3. getCities 通过 funcErrorCheckAndTransform 处理来自 getCityList 端点的响应,并返回一个 observable 给 Presenter 层

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

    【讨论】:

    • 我看过几个例子,它们都使用 Observable,我理解是 RxJava,我没有使用过 RxJava,是否有必要开始学习它,或者我现在可以不用它吗?
    猜你喜欢
    • 2020-09-10
    • 2021-11-03
    • 1970-01-01
    • 2022-09-27
    • 2015-10-10
    • 2018-09-20
    • 2020-06-11
    • 2019-04-02
    • 2017-07-28
    相关资源
    最近更新 更多