如何包装基于Clean Architecture的API响应以处理成功和错误? [英] How to wrap API responses to handle success and error based on Clean Architecture?
本文介绍了如何包装基于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?
推荐答案
- fillCities()调用getCities()
- getCities()调用getCityList()
-
getCities通过funcErrorCheckAndTransform处理来自getCityList端点的响应,并将可观察到的返回给演示者层
- fillCities() calls getCities()
- getCities() calls getCityList()
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屋!
查看全文