rx-java - 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 中,没有订阅动作,也没有观察者。然而,为什么它能够返回响应?
解决方案
API 的客户端是观察者,他们应该做subscribe
. 因此,在您的示例中,预计客户端将执行此操作:
getTestValue("someId")
/* maybe some other operators here */
.subscribe();
该“客户端”可能是正在使用您的 API 开发他们自己的应用程序的开发人员,也可能是您正在与之集成的某些框架的内部(在您的示例中可能就是这种情况,因为使用了注释)。
推荐阅读
- ssh - tigervnc 未与本地主机连接
- python-3.x - md5(str.encode(var1)).hexdigest() 将十六进制值设为 382fbe213f159eecf85facb256f265d0 - 如何知道 var1?
- sql - SQL Server:多个小表与一个大表进行搜索
- r - R:如何绘制由 lm poly fit 生成的自定义多项式范围
- vue.js - 为什么路由器查询不会在 nuxt 中立即更新?
- c# - 在标签 href中调用 Url.Action 时,Modal 中缺少内容
- python - 将 Python 3.7 添加到 Pycharm
- python - 如何使用按钮更改 Windows kivymd 地图应用程序?
- drawable - Glide不支持drawable中的attrs?
- arrays - 将字符串输入到字符串数组中