7.0 第7章 消费REST服务

第7章 消费REST服务

本章内容:
  • 使用RestTemplate消费REST API
  • 使用Traverson导航超媒体API

你有没有过这样的经历——跑去看电影,却发现自己是影院中唯一的一个人。这当然是一种很奇妙的经历,从本质上来讲,这变成了一个私人电影。你可以选择任意想要的座位、和屏幕上的角色交谈,甚至可以打开手机发推特,完全不用担心因为破坏了别人的观影体验而惹人生气。最棒的是,没有人会毁了你观看这部电影的心情。

对我来说,这样的事情并不常见。但是,遇到这种情况的时候,我会想,如果我也不出现的话会发生什么呢?工作人员还会播放这部影片吗?电影中的英雄还会拯救世界吗?电影播放结束后,工作人员还会打扫影院吗?

没有观众的电影就像没有客户端的API。这些API已经准备好接收和提供数据了,但是如果它们从来没有被调用过,它们还是API吗?就像薛定谔的猫一样,在发起请求之前,我们并不知道这个API是否活跃,也不知道它是否返回HTTP 404响应。

在前面的章节中,我们主要关注如何定义REST端点,它们可以被应用外部的客户端所消费。尽管开发这种API的主要驱动力是单页Angular应用,以便于实现TacoCloud Web站点,但实际上客户端可以是任意应用,可以是任何语言,甚至可以是另外一个Java应用。

Spring应用除了提供对外API之外,同时要对另外一个应用的API发起请求的场景并不罕见。实际上,在微服务领域,这正变得越来越普遍。因此,花点时间研究一下如何使用Spring与REST API交互是非常值得的。

Spring应用可以采用多种方式来消费REST API,包括以下几种方式:

  • RestTemplate:Spring核心框架提供的简单、同步REST客户端。
  • Traverson:Spring HATEOAS提供的支持超链接、同步的REST客户端,其灵感来源于同名的JavaScript库。
  • WebClient:Spring 5所引入的反应式、异步REST客户端。

我将WebClient推迟到第11章讨论Spring的反应式Web框架时再进行介绍,现在我们主要关注其他的两个REST客户端。下面先从RestTemplate开始。