2017-02-01 61 views
9

kiedy używamy retrofit2 do wykonywania wywołań reszta API z Rx, Jakie jest najlepsze podejście do użycia, pojedyncze lub obserwowalne?Rx 2 Android, co jest lepsze Single lub zauważalne dla połączeń API?

public interface ApiService{ 

Single<Data> getDataFromServer(); 

Observable<Data> getDataFromServer(); 
} 
+1

Gdybym miał wybierać użyłbym Pojedyncze, – Blackbelt

+0

Dzięki, zgadzam się z tym co mamy spożywać tylko jeden element, jednak chciałbym, aby uzyskać więcej informacji zwrotnej o wyborze jednego lub drugiego. –

Odpowiedz

10

Sugeruję użyciu Single, ponieważ jest bardziej dokładna reprezentacja przepływu danych: Państwo złożyć zamówienie na serwer i można dostać albo jedną emisję danych LUB błąd:

Single:  onSubscribe (onSuccess | onError)? 

Dla Observable można teoretycznie uzyskać kilka emisji danych I błąd

Observable: onSubscribe onNext? (onCompleted | onError)? 

Jeśli jednak używasz , sugeruję użycie Maybe zamiast Single. Różnica między nimi polega na tym, że Maybe obsługuje także przypadek, gdy otrzymujesz odpowiedź z serwera, ale nie zawiera ona treści.

Maybe:  onSubscribe (onSuccess | onCompleted | onError)? 
+1

Interesujące, że nie wiedziałem nic o "może", wydaje się ważnym elementem, o którym należy pamiętać. FYI: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#maybe –

+0

Tak, jest całkiem nowy, bardziej jak * na przyszłość *. Również FYI: https://medium.com/@manuelvicnt/rxjava2-android-mvvm-lifecycle-app-structure-with-retrofit-2-cf903849f49e – Lamorak

5

Różnica między Observable i Single jest raczej semantyczny. Kiedy deklarujesz coś, co mówisz, Single mówisz, że to obserwowalne wytworzy tylko jedną wartość, a nie serię wartości.

Stosowanie właściwych typów semantycznych jest najlepszym sposobem dokumentowania interfejsu API.

+0

Czy nie byłby bardziej zgodny z pojedynczą odpowiedzią, a nie pojedynczym obiektem? – Omaraf