SpringBoot调用第三方接口的几种方式小结
作者:奋斗的狍子007
一、前言
在项目中调用第三方接口时,确实需要根据项目的技术栈、架构规范以及具体的业务需求来选择最适合的调用方式。比如:RESTful API调用、Feign声明式HTTP客户端、Apache HttpClient等调用方式,每种方式都有其适用场景和优势。下面我们就介绍几种调用第三方接口的实现方式以及代码示例。
二、常见的调用方式
1. RESTful API调用
适用场景:当第三方接口遵循RESTful设计风格时,通常使用HTTP客户端库(如OkHttp、Apache HttpClient等)来发送HTTP请求并接收响应。
优势:
- 通用性强:RESTful API基于HTTP协议,可以跨平台、跨语言调用。
- 灵活性高:支持各种HTTP方法(GET、POST、PUT、DELETE等),可以满足不同的业务需求。
- 易于测试:可以使用Postman、curl等工具进行接口测试。
- 实现方式:使用HTTP客户端库构建请求,发送请求并处理响应。
2. Feign声明式HTTP客户端
适用场景:在Spring Cloud等微服务架构中,Feign可以作为声明式HTTP客户端,简化HTTP请求的编写。
优势:
- 简化代码:通过注解的方式定义HTTP请求,减少模板代码。
- 支持负载均衡:可以配合Ribbon等组件实现客户端负载均衡。
- 易于集成:与Spring Cloud等框架集成良好,方便使用。
- 实现方式:在Spring Boot项目中添加Feign依赖,使用注解定义HTTP请求,并通过注入的方式调用Feign客户端。
3. Apache HttpClient
适用场景:对于需要更精细控制HTTP请求和响应的场景,可以使用Apache HttpClient。
优势:
功能丰富:支持HTTP/1.1和HTTP/2,提供丰富的API来构建和发送HTTP请求。
灵活性强:可以自定义请求头、请求体、连接池等参数。
可扩展性好:支持插件式扩展,可以根据需要添加自定义功能。
实现方式:使用HttpClientBuilder构建HttpClient实例,通过HttpClient实例发送HTTP请求并处理响应。
4. 其他方式
- Spring的RestTemplate:在Spring框架中,RestTemplate提供了简化的方式来调用RESTful服务。它内部封装了HttpClient,提供了更加简洁的API。
- WebClient:在Spring WebFlux中,WebClient是一个响应式、非阻塞的HTTP客户端,用于调用RESTful服务。
- GraphQL客户端:如果第三方接口支持GraphQL,可以使用GraphQL客户端库(如Apollo、Relay等)来调用。
三、SpringBoot 第三方接口调用示例
1. JDK HttpClient
自Java 11起,JDK自带了一个全新的HTTP客户端API,用于发送HTTP请求和接收HTTP响应。
它提供了同步和异步的API,支持HTTP/1.1和HTTP/2,并且是基于CompletableFuture实现的异步操作。
import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpTimeoutException; public class JdkHttpClientTest { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://123.com")) .build(); try { HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); System.out.println(response.body()); } catch (Exception e) { e.printStackTrace(); } } }
2. Apache HttpClient
Apache HttpClient是一个功能丰富的HTTP客户端库,由Apache Software Foundation开发,广泛应用于各种Java项目中,用于发送HTTP请求和接收HTTP响应。
public class ApacheHttpClientTest { public static void main(String[] args) { HttpGet request = new HttpGet("https://1234.com"); CloseableHttpClient client = HttpClients.custom().build(); try { HttpClientResponseHandler<String> responseHandler = new BasicHttpClientResponseHandler(); String ret = client.execute(httpget, responseHandler) ; System.out.println(ret) ; } catch (Exception e) { e.printStackTrace(); } } }
3. OkHttp
OkHttp是一款由Square公司贡献的开源网络请求的轻量级框架,主要用于Android和Java应用。它作为现代HTTP客户端,具备高效、易用、功能强大的特点。
public void OkHttpClientTest() { // 1. 创建一个OkHttpClient实例 OkHttpClient client = new OkHttpClient(); // 2. 创建一个Request对象 Request request = new Request.Builder().url("http://1234.com") // 设置请求的URL .build(); // 3. 发送请求并获取Response对象 try (Response response = client.newCall(request).execute()) { String responseBody = response.body().string(); System.out.println(responseBody); } catch (IOException e) { e.printStackTrace(); } }
4. RestTemplate
RestTemplate是Spring框架中的一个类,它提供了一个高层次的RESTful web service客户端。
它简化了与RESTful web services的集成,并提供了多种方法来发送HTTP请求和接收HTTP响应。
public class RestTemplateTest { public static void main(String[] args) { RestTemplate restTemplate = new RestTemplate(); String response = restTemplate.getForObject("https://1234.com", String.class); System.out.println(response); } }
5. WebClient
WebClient 是Spring WebFlux提供的一个非阻塞的、响应式的Web客户端,用于发起HTTP请求。它特别适用于响应式编程模型和Spring WebFlux应用程序。
public class WebClientExample { public static void main(String[] args) { WebClient webClient = WebClient.create("http://1234.com"); webClient.get() .uri("/api/data") .retrieve() .bodyToMono(String.class) .subscribe( body -> System.out.println(body), error -> System.err.println("Error occurred: " + error) ); } }
6. OpenFeign
注意这里是OpenFeign可不是Spring Cloud OpenFeign,Spring Cloud openfeign对OpenFeign进行了包装,所以在使用上是有差别的。
添加依赖
<dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-core</artifactId> <version>13.2.1</version> </dependency>
public interface MyFeignClient { @RequestLine("GET /api/data") String getData(); static MyFeignClient create() { return Feign.builder() .encoder(new JacksonEncoder()) .decoder(new JacksonDecoder()) .logger(new Logger.ErrorLogger()) .logLevel(Level.FULL) .retryer(new Retryer.Default(100, TimeUnit.MILLISECONDS.toMillis(1), 5)) .target(Target.EmptyTarget.create(MyFeignClient.class, "http://123456.com")); } }
MyFeignClient client = MyFeignClient.create(); String data = client.getData(); System.out.println(data);
以上对 Spring Boot 调用外部接口的六种方式进行了简单介绍,但实践中需要依据项目具体需求和实际情况进行选择,以确保项目导向和效率最优。
到此这篇关于SpringBoot调用第三方接口的几种方式小结的文章就介绍到这了,更多相关SpringBoot调用第三方接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!