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
IObservable REST klient
-
- častý přispěvatel
- Příspěvky: 228
- Registrován: stř bře 28, 2012 12:46
- Zařízení: ano
IObservable REST klient
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?
-
- smartmaniak
- Příspěvky: 1094
- Registrován: stř lis 24, 2010 22:29
- Zařízení: L920, L930, L950 XL, iPhone 7 Plus
- Bydliště: Líbeznice
IObservable REST klient
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;
-
- častý přispěvatel
- Příspěvky: 228
- Registrován: stř bře 28, 2012 12:46
- Zařízení: ano
IObservable REST klient
??? Veď sa o Rx bavíme celý čas.steelspace píše: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;
-
- přispěvatel
- Příspěvky: 89
- Registrován: čtv srp 30, 2007 2:21
- Zařízení: Lumia 925
- Bydliště: Praha
- Kontaktovat uživatele:
IObservable REST klient
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..
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..
-
- častý přispěvatel
- Příspěvky: 228
- Registrován: stř bře 28, 2012 12:46
- Zařízení: ano
IObservable REST klient
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)
-
- přispěvatel
- Příspěvky: 89
- Registrován: čtv srp 30, 2007 2:21
- Zařízení: Lumia 925
- Bydliště: Praha
- Kontaktovat uživatele:
IObservable REST klient
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
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti