主要观点:
- 应用需交换数据以协作,如今的应用处于类似人类交流的情境,文中主要分析客户端与服务器通过 REST 的同步通信及 Spring REST API 客户端的实现。
- 介绍了
RestTemplate(Spring Framework 3.0 引入)、WebClient(Spring Framework 5.0 引入)和RestClient(Spring Framework 6.1 和 Spring Boot 3.2 引入)这三种用于同步 HTTP 访问的组件,开发者可根据应用需求选择。 - 通过
figure-service(服务器)和figure-client(客户端)的示例,展示了使用RestTemplate和RestClient实现同步通信的过程,包括接口定义、认证、数据传输对象(DTO)、异常处理、日志记录和配置等方面。
关键信息:
RestTemplate是同步客户端,灵活且高度可配置,长期是 Spring 应用中同步阻塞 HTTP 客户端的最佳选择,但缺乏非阻塞能力等。WebClient专为WebFlux栈设计,遵循现代函数式 API 风格,更易使用,但对于阻塞场景有额外成本。RestClient提供更现代的 API,可用于同步 HTTP 访问,在新的应用中可替代RestTemplate。figure-service暴露 REST API 管理Figure实体,存储在内存 H2 数据库中,所有服务器异常以特定形式处理。figure-client通过FigureClient接口与figure-service通信,在实现中考虑了合同、认证、DTO、异常处理等,可使用RestTemplate或RestClient,并可通过LoggingInterceptor记录请求和响应。
重要细节:
AuthInterceptor通过环境变量获取 API 密钥并添加到请求头进行认证。CustomResponseErrorHandler用于处理响应错误,区分客户端和服务器错误并返回自定义异常。LoggingInterceptor可记录请求和响应体,但要注意读取响应体后流被消耗的问题,可使用BufferingClientHttpRequestFactory解决。RestTemplate的配置通过RestTemplateBuilder添加拦截器和错误处理程序。- 在测试中,通过
CommandLineRunner向figure-service数据库中插入数据,然后使用FigureClientTest测试figure-client的各种操作。 RestClient的配置类似RestTemplate,可重用部分拦截器和错误处理程序,通过注入RestClient实例实现客户端功能。
资源:
RestTemplateSpring Framework API ReferenceWebClientSpring Framework API ReferenceRestClientSpring Framework API Reference- Migrating from RestTemplate to RestClient
- figure-service source code
- figure-client source code
- 图片拍摄于罗马尼亚布加勒斯特。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。