当我们使用Retrofit2来进行带有Rx的API REST调用时,最好的方法是使用Single还是Observable?
public interface ApiService{
Single<Data> getDataFromServer();
Observable<Data> getDataFromServer();
}
当我们使用Retrofit2来进行带有Rx的API REST调用时,最好的方法是使用Single还是Observable?
public interface ApiService{
Single<Data> getDataFromServer();
Observable<Data> getDataFromServer();
}
我建议使用Single
,因为它更准确地表示数据流:您向服务器发送请求,然后获取一个数据发出OR错误:
Single: onSubscribe (onSuccess | onError)?
对于一个Observable
来说,理论上可以获取多个数据发射和一个错误。
Observable: onSubscribe onNext? (onCompleted | onError)?
然而,如果您正在使用rx-java2,我建议您使用Maybe
代替Single
。这两者之间的区别在于Maybe
还处理了从服务器获取响应但没有正文内容的情况。
Maybe: onSubscribe (onSuccess | onCompleted | onError)?
Observable
和Single
的区别在语义上更为明显。当您声明某个Single
时,您正在表示此可观察对象只会生成一个值,而不是一系列值。
使用适当的语义类型是记录API的最佳方法。