SpringBoot:SpringBoot 调用第三方接口的几种方式

一、前言

  在项目中调用第三方接口时,确实需要根据项目的技术栈、架构规范以及具体的业务需求来选择最适合的调用方式。比如: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 调用外部接口的六种方式进行了简单介绍,但实践中需要依据项目具体需求和实际情况进行选择,以确保项目导向和效率最优。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/37012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

仓库管理系统16--入库管理

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现。 1、创建物资入库用户控件 <UserControl x:Class"West.StoreMgr.View.InStoreView"xmlns"http://schema…

CAS自旋解析

CAS全称CompareAndSwap(比较并交换)&#xff0c;是cpu的指令&#xff0c;调用时不涉及上下文的切换。Java中属于乐观锁的一种&#xff0c;具体流程如下图&#xff1a; 具体的实现使用的是Unsafe类去调用native修饰的compareAndSwap方法&#xff0c;4个字段分别是对象实例&#…

PTA—C语言期末复习(判断题)

1. C语言程序是从源文件的第一条语句开始执行的 &#xff08;F&#xff09; 在 C 语言中&#xff0c;程序是从 main 函数开始执行的&#xff0c;而不是从源文件的第一条语句开始执行 2. 若变量定义为double x;&#xff0c;则x % 2是符合C语言语法的表达式 &#xff08;F&#…

通过nginx去除 api url前缀 并保持后面剩余的url不变向后台请求

如 我前台浏览器向后台请求的接口是 http://127.0.0.1:5099/api/sample/sample/getbuttonlist 实际的请求接口传向 http://192.168.3.71:5099/sample/sample/getbuttonlist 方法是向config中加入下面这样一个server server {listen 5099;location /api/ {rewrite ^/a…

HTML流星雨

目录 写在前面 完整代码 代码分析 系列文章 写在最后 写在前面 岁月如梭&#xff0c;光阴似箭&#xff0c;不知不觉暑假就要来喽&#xff0c;本期小编用HTML给大家手搓了一个炫酷的流星雨动画&#xff0c;一起来看看吧。 完整代码 <!DOCTYPE html> <html lang…

项目风险管理系统有哪些?分享11款主流项目管理系统

本文将分享11款主流项目管理系统&#xff1a;PingCode、Worktile、StandardFusion、MasterControl、ClickUp、SAI360、Netwrix Auditor、MetricStream、Wrike、Celoxis、Zoho Projects。 在项目管理中&#xff0c;风险管理不仅是一个挑战&#xff0c;也是保证项目顺利进行的关键…

探索Vim的文本处理能力:精通查找与替换

探索Vim的文本处理能力&#xff1a;精通查找与替换 Vim&#xff0c;作为Linux终端下的王牌文本编辑器&#xff0c;以其强大的功能和灵活性深受开发者和系统管理员的喜爱。在Vim中进行查找和替换是文本编辑中的一项基础且重要的操作。本文将详细解释如何在Vim中执行查找和替换文…

Linux Redis 服务设置开机自启动

文章目录 前言一、准备工作二、操作步骤2.1 修改redis.conf文件2.2 创建启动脚本2.3 设置redis 脚本权限2.4 设置开机启动2.5 验证 总结 前言 请各大网友尊重本人原创知识分享&#xff0c;谨记本人博客&#xff1a;南国以南i、 提示&#xff1a;以下是本篇文章正文内容&#x…

编程的难点在哪?是逻辑、算法,还是模块、框架的掌握?

&#x1f446;点击关注 回复『新人礼』获取学习礼包&#x1f446; 很多新手程序员在一开始都是满怀热情地投入到编程的学习&#xff0c;但却在学习过程中处处碰壁&#xff0c;导致放弃。 编程的难点在于逻辑、数学、算法&#xff0c;还是模块、框架、接口的掌握&#xff1f;但…

idea Error running ‘Application‘

1、Error running ‘Application’ Error running ApplicationError running Application. Command line is too long.Shorten the command line via JAR manifest or via a classpath file and rerun.找到 .idea/libraies/workspace.xml 中的 PropertiesComponent 属性&#…

Android InputDispatcher分发输入事件

派发循环是指 InputDispatcher 不断地派发队列取出事件&#xff0c;寻找合适的窗口并进行发送的过程&#xff0c;是 InputDispatcher 线程的主要工作 事件发送循环是 InputDispatcher 通过 Connection 对象将事件发送给窗口&#xff0c;并接受其反馈的过程 InputDispatcher —…

Spring Boot跨域请求关键处理技术解析

Spring Boot跨域请求关键处理技术解析 在Web开发中&#xff0c;跨域请求是一个常见问题&#xff0c;尤其在微服务架构和前后端分离的开发模式中更为突出。Spring Boot作为一种流行的Java Web框架&#xff0c;提供了多种解决跨域请求的方法。本文将详细解析Spring Boot中跨域请…

在 Qt 中设置 QMainWindow 的大小

问题描述 一位 Qt 新手提问&#xff0c;是否有办法将 QMainWindow 的大小设置为用户桌面大小的 70%。他尝试过使用伸缩因子&#xff0c;但未成功。QWidget::setFixedSize 可以工作&#xff0c;但只能使用像素值。 解决方案 方案一&#xff1a;使用 QDesktopWidget 在 QMain…

大模型赋能全链路可观测性:运维效能的革新之旅

目录 全链路可观测工程与大模型结合---提升运维效能 可观测性&#xff08;Observability&#xff09;在IT系统中的应用及其重要性 统一建设可观测数据 统一建设可观测数据的策略与流程 全链路的构成和监控形态 云上的全链路可视方案 为什么一定是Copilot 大模型的Copilo…

mov和mp4区别是什么?苹果的原创和时代的宠儿

在数字媒体领域&#xff0c;视频格式的选择往往决定了观看体验的质量和文件的兼容性。在众多视频格式中&#xff0c;MOV和MP4无疑是最具代表性的两种&#xff0c;它们分别承载着苹果和互联网世界的技术革新与历史变迁。本文将带您穿越时间的长廊&#xff0c;探索MOV与MP4的发展…

A : 平面划分

Description 一条直线可以把平面分成两部分&#xff0c;两条直线分成四部分。那么 n 条直线最多可以把平面分成几部分&#xff1f; Input 多组数据&#xff0c;每组数据一个正整数 1≤&#xfffd;≤1000。 Output Sample #0 Input Copy 3 5 Output Copy 7 16 Hin…

区间DP——AcWing 320. 能量项链

区间DP 定义 区间动态规划&#xff08;Interval Dynamic Programming&#xff09;&#xff0c;简称区间DP&#xff0c;是动态规划领域的一个重要分支&#xff0c;专门用于解决涉及区间问题的最优化问题。这类问题通常需要在给定的一组区间上找到最优解&#xff0c;比如求解最…

福兰农庄携手越南NFC巨头朱雀桥薇妮她百香果饮料,深化品质合作

近日&#xff0c;国内知名果汁品牌福兰农庄成功与越南NFC行业领军者朱雀桥建立深入合作关系。为了进一步提升产品品质和市场竞争力&#xff0c;福兰农庄派遣专业团队前往越南&#xff0c;深入VINUT百香果饮料的生产线&#xff0c;学习其从原料采购到产品上市的严格操作流程。 在…

IAR 常见报错与实用小技巧(ZigBee)

一、报错 1.未发现选择目标 原因&#xff1a;硬件连接存在问题 解决方案&#xff1a;将数据线重新插拔或更换接口、数据线 2. 烧录终止 原因&#xff1a;烧录前未点击仿真器复位按钮 解决方案&#xff1a; 进行烧录前点击仿真器复位按钮&#xff08;下载过程中不能按&#xff…

数据结构与算法 - 图

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 图的定义和基本概念&#xff1a; 图&#xff08;Graph&#xff09;是一种由…