问题描述
我经常看到使用rxJava以反应方式编写的API。我已经学习了rxJava的基础知识,曾经以为我知道它是如何工作的。但是当我在API上下文中再次考虑它时,我开始不理解它。当没有观察者订阅可观察对象时,为什么API可以工作并返回响应?
在rxJava中,通常使用observable和observer来解释它,并且有一个订阅动作,例如
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以获取一些数据,进行过滤或映射等,并返回一个可观察的对象。
但是在整个API中,没有订阅动作,也没有观察者。但是,为什么它能够返回响应?
解决方法
API的客户端是观察者,他们应该执行subscribe
。因此,在您的示例中,预期客户端会这样做:
getTestValue("someId")
/* maybe some other operators here */
.subscribe();
该“客户端”可以是使用您的API开发自己的应用程序的开发人员,也可以是您要与之集成的某些框架的内部结构(在示例中,考虑到使用注释)。