首页 > 解决方案 > rxJava 的 API 是如何工作的

问题描述

我经常看到使用 rxJava 以响应式方式编写的 API。我已经学习了 rxJava 的基础知识,并且曾经认为我知道它是如何工作的。但是当我在 API 的上下文中再次考虑它时,我开始不理解它。为什么在没有观察者订阅 observable 的情况下 API 可以工作并返回响应?

在rxJava中,经常用observable和observer来解释,还有一个subscribe action,例如

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

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

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

"testService" 类会做一些处理,例如调用另一个 API 来获取一些数据,并进行过滤或映射等,它会返回一个 observable。

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

标签: rx-javareactive-programming

解决方案


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

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

该“客户端”可能是正在使用您的 API 开发他们自己的应用程序的开发人员,也可能是您正在与之集成的某些框架的内部(在您的示例中可能就是这种情况,因为使用了注释)。


推荐阅读