Rx 2 Android 中对于 API 调用,使用 Single 还是 Observable 更好?

25

当我们使用Retrofit2来进行带有Rx的API REST调用时,最好的方法是使用Single还是Observable?

public interface ApiService{

Single<Data> getDataFromServer();

Observable<Data> getDataFromServer();
}

1
如果我必须选择,我会使用Single。 - Blackbelt
谢谢,我同意我们只消耗一个元素,不过我想要更多关于选择哪个的反馈。 - Jose M Lechon
2个回答

29

我建议使用Single,因为它更准确地表示数据流:您向服务器发送请求,然后获取一个数据发出OR错误:

Single:     onSubscribe (onSuccess | onError)?

对于一个Observable来说,理论上可以获取多个数据发射一个错误。

Observable: onSubscribe onNext? (onCompleted | onError)?

然而,如果您正在使用,我建议您使用Maybe代替Single。这两者之间的区别在于Maybe还处理了从服务器获取响应但没有正文内容的情况。

Maybe:      onSubscribe (onSuccess | onCompleted | onError)?

1
有趣的是,我之前不知道“maybe”这个概念,看来这是一个需要记在心里的重要元素。附带信息:https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#maybe - Jose M Lechon
是的,这很新,更像是“供将来参考”。另外FYI:https://medium.com/@manuelvicnt/rxjava2-android-mvvm-lifecycle-app-structure-with-retrofit-2-cf903849f49e - Lamorak

11
< p > ObservableSingle的区别在语义上更为明显。当您声明某个Single时,您正在表示此可观察对象只会生成一个值,而不是一系列值。

使用适当的语义类型是记录API的最佳方法。


这不更符合单个响应而不是单个对象吗? - Omaraf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接