IObservable REST klient

Vše okolo vývoje aplikací pro platformy Windows Phone a Windows 10 Mobile
Post Reply
BEZY
přispěvatel
přispěvatel
Posts: 89
Joined: Thu Aug 30, 2007 2:21
Zařízení: Lumia 925
Location: Praha
Contact:

IObservable REST klient

Post by BEZY »

Zdravím,

chystám se napsat knihovnu pro práci s webovým serverem (typická služba, která poskytuje nějaká data), který má dostupné REST rozhraní. Jelikož jsem si docela oblíbil Reactive Extensions, tak chci využít je a na různé Get... metody vracet IObservable. Nevim ale úplně přesně, jak tu knihovnu uchopit - jakým způsobem ji navrhnout. Vidim několik možností

1) Metody by vracely IObservable<IEnumerable<Typ>>. Je to logické, protože rest požadavek ihned vrátí celou kolekci, tak se tato kolekce volajícímu rovnou předá a ihned se zavolá OnCompleted(), takže by se např. při stránkování musel znovu volat Subscribe()

2) Metody by vracely IObservable<Typ>. Po Subscribe() by se IObservable inicializovala a zůstala by aktivní až do konce běhu programu. Pro stránkování by pak např. mohly existovat další metody, třeba GetNextBatch apod... které by data už sypaly do existujícího proudu.

3) Vykašlat se na IObservable a využít eventů (podle mě nejblbější řešení)

4) Něco jiného? Plus další věc - má cenu použít IObservable na Set... metody (čti REST POST metody, které vrací např. jen jednu strukturu, nebo obecně 1 hodnotu) nebo je to overkill?

Jestli máte někdo zkušenosti s návrhem podobného klienta, podělte se o zkušenosti, já zatim moc zkušeností nemam a využíval jsem jen "naivní" přístup, chci ale navrhnout něco elegantního :) Díky za vaše názory
Igor Kulman
častý přispěvatel
častý přispěvatel
Posts: 228
Joined: Wed Mar 28, 2012 12:46
Zařízení: ano

IObservable REST klient

Post by Igor Kulman »

Trváš na vrátení Typu? Ja som si zvykol, že Restsharp mi vracia IRestRespone a s tým si už naložím, ako uznám za vhodné a často sa rozhodujem podľa HTTP kódu. Môj návrh je preto vracať niečo na štýl IObservable<IRestResponse> a samozrejme spôsobom číslo 2. Spôsob 1 je blbosť, u IObservable ide o to, že sa raz subscribnem a pri každom volaní z webu dostanem odpoveď (ako napríklad pri SOAP službách). Robiť x subscriptions keď to volám x-krát je blbosť. Čo tak spraviť len Rx nadstavbu nad Restsharp?
steelspace
smartmaniak
smartmaniak
Posts: 1094
Joined: Wed Nov 24, 2010 22:29
Zařízení: L920, L930, L950 XL, iPhone 7 Plus
Location: Líbeznice

IObservable REST klient

Post by steelspace »

Poměrně zajímavá alternativa by mohly být Reactive Extensions (Rx) http://stackoverflow.com/questions/2833 ... ensions-rx" onclick="window.open(this.href);return false;
Igor Kulman
častý přispěvatel
častý přispěvatel
Posts: 228
Joined: Wed Mar 28, 2012 12:46
Zařízení: ano

IObservable REST klient

Post by Igor Kulman »

steelspace wrote:Poměrně zajímavá alternativa by mohly být Reactive Extensions (Rx) http://stackoverflow.com/questions/2833 ... ensions-rx" onclick="window.open(this.href);return false;
??? Veď sa o Rx bavíme celý čas.
BEZY
přispěvatel
přispěvatel
Posts: 89
Joined: Thu Aug 30, 2007 2:21
Zařízení: Lumia 925
Location: Praha
Contact:

IObservable REST klient

Post by BEZY »

Vracet přímo IRestResponse je zajímavej nápad, zamyslim se nad tim :)

Jinak jsem stejnou otázku položil i na SO, zatim tam jsou 2 odpovědi, tak můžete klidně komentovat i tam

http://stackoverflow.com/questions/1193 ... est-client" onclick="window.open(this.href);return false;

Doporučení je tam ale opačný - co Subscribtion, to REST request..
Igor Kulman
častý přispěvatel
častý přispěvatel
Posts: 228
Joined: Wed Mar 28, 2012 12:46
Zařízení: ano

IObservable REST klient

Post by Igor Kulman »

Asi som sa zle vyjadril. Myslel tak, že 1 subscription = 1 "zdroj". Teda ak volám stankovaný zdroj by bol vďaka tomu na 1 subscription. (requesty na rôzne "zdroje" majú rôzne subscriptions)
BEZY
přispěvatel
přispěvatel
Posts: 89
Joined: Thu Aug 30, 2007 2:21
Zařízení: Lumia 925
Location: Praha
Contact:

IObservable REST klient

Post by BEZY »

Jasně, to jsem pochopil. Takže zavolat pro každej zdroj Subscribe() a pokud by volající chtěl například další data / další stránku, tak zavolat např. GetNextBatch, prostě ten druhý způsob. Ono to asi i dává větší smysl, protože pokud bych chtěl, aby se např. ta knihovna serveru dotazovala automaticky, třeba přes Timer, tak je blbost aby ta Observable sekvence ihned po vykonání požadavku skončila. Thx
Post Reply

Return to “Programování a vývoj”

Who is online

Users browsing this forum: No registered users and 1 guest