ReactiveXで非同期通信の直列化と結果の合成をどうやるか、教えてほしいです。

  1. apiAを叩く
  2. apiAが成功したらapiAの結果をparameterとしてapiBを叩く
  3. apiBが成功したらapiAとapiBの結果をparameterとしてapiCを叩く

rxswiftを使っていますが、概念としては同じだと思うので特定の言語はタグ指定していません。

現在下記のように各種非同期通信をObservableで返すfunctionが実装されています。
それらをどう利用するかを教えてほしいです

func requestApiA() -> Observable<ResponseA> { /* 略 */ }
func requestApiB(parameterA: ResponseA) -> Observable<ResponseB> { /* 略 */ }
func requestApiC(parameterA: ResponseA, parameterB: ResponseB) -> Observable<ResponseC> { /* 略 */ }