2016-12-14 2 views
1

私は、複数のREST APIを呼び出すプロキシを使用して、UIのコースグレイン出力を作成しています。 UIはKnockoutJSで構築されています。私は非同期的にAPIを呼び出すためにタスク/非同期メソッドを使用しています。 1つまたは2つのAPIだけがリストを返し、他はすべてフラット値のオブジェクトを返します。 Rxはコレクションを返さないAPIの結果を結合するために使用できますか?出力はコレクションではないので、それはイベントストリームではないので、RxとのこのようなAPIコールをRxガイドラインと組み合わせることはできますか?リアクティブな拡張機能は、コレクションを返すAPI呼び出しにのみ適していますか?

+1

いくつかのコードを教えてください。 –

+1

どちらの場合も、(Rxの意味で)単一の値が返されます。その単一の項目はスカラー値またはコレクションかもしれませんが、これはまだ単一のHTTP応答です(ここでは、RESTとはHTTPを意味すると仮定しています)。あなたがWebSocketまたはAtomフィードからのメッセージの流れであったならば、Rxの言葉ではyesとなり、それ以上の基数を持つ一連の出来事が起こります。いずれにしても、Rxはうれしく0,1または多くの。 –

答えて

1

出力はコレクションではないため、イベントストリームではないので、RxとのこのようなAPI呼び出しをRxガイドラインと組み合わせることはできますか?

1つのイベントのみのストリームとしてAPI呼び出しを参照してください。このイベントはList、またはちょうどObjectです。

コレクションを返さないAPIの結果を結合するためにRxを使用できますか?

はい! Reactive Extentionsは、非同期呼び出し用のAPIです。 APIがコレクション、オブジェクト、または何も返さないかどうかは関係ありません。

例:

interface YourRemoteApi { 
     Observable<List<String>> users(); 
     Observable<User> userData(String id); 
     Observable<Void> deleteUser(String id); 
    } 


    class Main { 

      public static void main(String...args) { 

       YourRemoteApi api = ... 
       api.users() 
        // transform an Observable<List<String>> to Observable<String> 
        .flatMapIterable(ids -> ids) 
        // call in a async fashion api.userData() 
        .contatMap(id -> api.userData(id)) 
        .filter(data -> data.toDelete()) 
        // call in a async fashion api.deleteUser 
        .flatMap(data -> api.deleteUser(data.id)) 
        .subscribe(); 
      } 

    } 

PS:この例では、RxJavaを使用しています。別の言語のポート(Reactive Extensions for .NETなど)が異なる場合があります。

+0

あなたができるということは、あなたがすべきことではないということだけです。 Javaでは、表現力が非常に限定されており、非同期プログラミングの構文サポートはありません。 C#、VB、その他の言語では、はるかに洗練されたオプションがあります。 Javaはひどいです - それに関して世界を見ないでください。 –

関連する問題