API 与 rxJava 的工作原理

How API with rxJava works

我经常看到 API 使用 rxJava 以响应方式编写。我学习了 rxJava 的基础知识,并一度认为我知道它是如何工作的。但是在API的语境下再想想,我就开始不明白了。为什么 API 可以工作并且 return 在没有观察者订阅 observable 时响应?

在rxJava中,经常用observable和observer的使用来解释,还有subscribe action,e.g.

Observable<String> source = source.just("a", "b");
source.subscribe(s -> System.out.println(s));

但是在 API 中使用 rxJava 和使用 Spring 编写,没有观察者也没有订阅操作,例如控制器class如下

@GetMapping(value = "/test")
public Observable<ServiceResponse> getTestValue(@RequestParam(value = "id") final String id) {
  return testService.getValue(id);
}

“testService”class 会做一些处理,例如调用另一个 API 来获取一些数据,并进行过滤或映射等,它 return 是一个可观察到。

但是整个API,没有订阅动作,也没有观察者。然而,为什么它能够 return 响应?

API 观察者的客户,他们应该做 subscribe。因此,在您的示例中,预计客户端将执行此操作:

getTestValue("someId")
   /* maybe some other operators here */
   .subscribe();

那个“客户”可以是使用您的 API 来开发他们自己的应用程序的开发人员,也可以是您正在与之集成的某些框架的内部结构(您的情况很可能就是这种情况)例如,给定注释的使用)。