IObservable REST klient
Posted: Sun Aug 12, 2012 20:21
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
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