当前位置: 首页 > news >正文

网站优化排名公司哪家好购物网站图标

网站优化排名公司哪家好,购物网站图标,聊城网站建设代理商,自助建站网信息发布平台环境#xff1a;SpringBoot.3.3.0 1、简介 在项目中调用第三方接口是日常开发中非常常见的。调用方式的选择通常遵循公司既定的技术栈和架构规范#xff0c;以确保项目的一致性和可维护性。无论是RESTful API调用、Feign声明式HTTP客户端、Apache HttpClient等调用方式… 环境SpringBoot.3.3.0 1、简介 在项目中调用第三方接口是日常开发中非常常见的。调用方式的选择通常遵循公司既定的技术栈和架构规范以确保项目的一致性和可维护性。无论是RESTful API调用、Feign声明式HTTP客户端、Apache HttpClient等调用方式每种方式都有其适用场景和优势选择最适合的方式将有助于提高开发效率和系统性能。接下来将全面介绍10种第三方接口调用的实现方式。 2、实战案例 2.1 JDK URL URL url URI.create(http://localhost:8002/api/data).toURL() ; URLConnection connection url.openConnection() ; connection.setDoInput(true) ; connection.setDoOutput(true) ; InputStream inputStream connection.getInputStream() ; String ret StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8) ; System.out.println(ret) ;该种方式比较麻烦上面代码还没有入参情况如果比较复杂的接口那么代码编写也比较费时。 2.2 JDK HttpClient URI uri URI.create(http://localhost:8002/api/data) ; HttpClient client HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(3)).executor(Executors.newCachedThreadPool()).build() ; HttpRequest request HttpRequest.newBuilder(uri).GET().build(); HttpResponseString response client.send(request, BodyHandlers.ofString()) ; System.out.println(response.body()) ;HttpClient类是在JDK11中提供感觉也挺麻烦不过它的可配置性更好了。 2.3 Apache Http Client HttpGet httpget new HttpGet(http://localhost:8002/api/data) ; CloseableHttpClient client HttpClients.custom().build() ; HttpClientResponseHandlerString responseHandler new BasicHttpClientResponseHandler() ; String ret client.execute(httpget, responseHandler) ; System.out.println(ret) ;Apache HttpClient 5是一个支持HTTP/2、高度可定制、支持异步请求的开源HTTP工具包提供了丰富的API和扩展特性。异步请求方式 CloseableHttpAsyncClient client HttpAsyncClients.custom().build() ; client.start() ; SimpleHttpRequest request SimpleRequestBuilder.get().setHttpHost(HttpHost.create(http://localhost:8002)).setPath(/api/data).build() ; FutureCallbackSimpleHttpResponse callback new FutureCallbackSimpleHttpResponse() {Overridepublic void failed(Exception ex) {System.err.printf(请求失败: %s%n, ex.getMessage()) ;}Overridepublic void completed(SimpleHttpResponse result) {System.out.printf(当前线程: %s, 请求完成...%n, Thread.currentThread().getName()) ;}public void cancelled() {} }; FutureSimpleHttpResponse future client.execute(request, callback) ; System.out.println(new String(future.get().getBodyBytes(), StandardCharsets.UTF_8)) ; client.close(CloseMode.GRACEFUL) ;Apache Client功能还是非常强大的。 2.4 OkHttp OkHttp是一个高效的HTTP客户端: HTTP/2 支持允许对同一主机的所有请求共享一个套接字。连接池可减少请求延迟如果 HTTP/2 不可用。透明GZIP缩小了下载大小。响应缓存可完全避免网络重复请求。 使用 OkHttp 非常简单。其请求/响应 API 采用流畅的构建器和不变性设计。它既支持同步阻塞调用也支持带回调的异步调用。 URL url URI.create(http://localhost:8002/api/data).toURL() ; OkHttpClient client new OkHttpClient(); Request request new Request.Builder().url(url).build() ; try (Response response client.newCall(request).execute()) {System.out.println(response.body().string()) ; }异步请求 URL url URI.create(http://localhost:8002/api/data).toURL() ; OkHttpClient client new OkHttpClient(); Request request new Request.Builder().url(url).build(); client.newCall(request).enqueue(new Callback() {public void onResponse(Call call, Response response) throws IOException {System.out.printf(当前线程: %s, 内容: %s%n, Thread.currentThread().getName(), response.body().string()) ;}public void onFailure(Call call, IOException e) {System.err.printf(请求失败: %s%n, e.getMessage()) ;} }) ;2.5 RestTemplate RestTemplate是我们项目中最为常用的接口调用方式了它以经典 Spring Template 类的形式为 HTTP 客户端库提供了高级 API。 RestTemplate restTemplate new RestTemplate() ; Map ret restTemplate.getForObject(URI.create(http://localhost:8002/api/data), Map.class) ; System.out.println(ret) ;通过RestTemplateBuilder可以对RestTemplate提供更多的配置。 RestTemplate restTemplate new RestTemplateBuilder()// 设置超时时间.setConnectTimeout(Duration.ofSeconds(5)).setReadTimeout(Duration.ofSeconds(5))// 设置拦截器.interceptors(List.of()).build() ; Map ret restTemplate.getForObject(URI.create(http://localhost:8002/api/data), Map.class) ; System.out.println(ret) ;注默认情况下RestTemplate是通过JDK URL实现接口访问我们可以自定义设置Apache Http或OKHttp实现。 2.6 WebClient RestTemplate 的替代方案支持同步、异步和流场景。WebClient 支持以下功能 非阻塞IO反应流背压用较少的硬件资源实现高并发利用 Java 8 lambdas 的函数式流畅应用程序接口支持同步和异步交互向服务器传输数据流或从服务器向下传输数据流 WebClient 需要一个 HTTP 客户端库来执行请求。内置的支持包括 Reactor NettyJDK HttpClientJetty Reactive HttpClientApache HttpComponents 其他可以通过ClientHttpConnector插入。 如下示例 WebClient client WebClient.create(http://localhost:8002); client.get().uri(/api/data)// 获取结果.retrieve().bodyToMono(String.class).subscribe(System.out::println) ;更多配置超时/错误 HttpClient httpClient HttpClient.create().option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000) ; WebClient client WebClient.builder().clientConnector(new ReactorClientHttpConnector(httpClient)).build() ; client.get().uri(http://localhost:8002/api/data).retrieve().onStatus(HttpStatusCode::is4xxClientError, resp - Mono.error(new RuntimeException(客户端请求错误))).bodyToMono(String.class).subscribe(System.out::println) ; System.in.read() ;通过WebClient#builder可以进行更多的配置信息。 2.7 RestClient RestClient是Spring6.1起添加的新的API。创建或构建后RestClient 可由多个线程安全使用。 RestClient client RestClient.create() ; ParameterizedTypeReferenceMapString, Object bodyType new ParameterizedTypeReferenceMapString, Object() {} ; MapString, Object ret client.get().uri(URI.create(http://localhost:8002/api/data)).retrieve().body(bodyType) ;还可以通过RestClient#builder RestClient client RestClient.builder()// 设置请求Header.defaultHeader(x-api-token, aaabbbccc111222)// 设置拦截器.requestInterceptor((request, body, execution) - execution.execute(request, body)).baseUrl(http://localhost:8002).build() ;通过builder方式你还可以进行更多的设置具体查看API。 2.8 Http Interface 将 HTTP 服务定义为带有 HttpExchange 方法的 Java 接口。你可以将这样的接口传递给 HttpServiceProxyFactory创建一个代理通过 HTTP 客户端如 RestClient 或 WebClient执行请求。 // 接口定义 public interface RemoteClient {GetExchange(/api/data)MapString, Object queryInfo() ; } // 执行调用 RestClient restClient RestClient.builder().baseUrl(http://localhost:8002).build() ; RestClientAdapter adapter RestClientAdapter.create(restClient) ; HttpServiceProxyFactory factory HttpServiceProxyFactory.builderFor(adapter).build() ;RemoteClient client factory.createClient(RemoteClient.class); System.out.println(client.queryInfo()) ;上面调用通过RestClient进行你也可以换成RestTemplate。 2.9 OpenFeign 注意这里是OpenFeign可不是Spring Cloud OpenFeignSpring Cloud openfeign对OpenFeign进行了包装所以在使用上是有差别的。 引入依赖 dependencygroupIdio.github.openfeign/groupIdartifactIdfeign-core/artifactIdversion13.2.1/version /dependency示例代码 // 接口定义 public interface RemoteClient {RequestLine(GET /api/data)MapString, Object queryInfo() ; } // 接口调用 RemoteClient client Feign.builder().decoder(new JacksonDecoder()).target(RemoteClient.class, http://localhost:8002) ; MapString, Object ret client.queryInfo() ;OpenFeign还是至其他很多的注解如ParamHeadersBody等。 2.10 Gateway Proxy 引入依赖 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-gateway-mvc/artifactId /dependency代码示例 private URI uri URI.create(http://localhost:8002);GetMapping(/api) public ResponseEntity? proxy(ProxyExchangebyte[] proxy) throws Exception {return proxy.uri(String.format(%s%s, uri.toString(), /api/data)).get() ; }在上面的方法中通过ProxyExchange进行远程接口的调用。 文章来源Spring全家桶实战案例源码
http://www.w-s-a.com/news/523175/

相关文章:

  • 网站结构图怎么画wordpress注册不发送件
  • 个人备案网站可以做论坛吗电商推广方式有哪些
  • 网站建设 自适应国内最近的新闻
  • 校园网站开发背景吴江网站建设公司
  • 网站开发工程师发展趋势山东省建设工程电子信息网站
  • 适合大学生创业的网站建设类型吉林省舒兰市建设银行网站
  • 呼和浩特网站建设哪家好培训学校加盟费用
  • 网站如何做友情链接有道云笔记WordPress
  • 贵阳企业网站建设制作赤峰浩诚网站建设公司
  • asp官方网站微信模板素材
  • wordpress 留言给站长发邮件做百度推广员赚钱吗
  • 北京建站公司做网站价格专门找人做软件的网站
  • 商务网站的特点ui软件界面设计
  • 广州个性化网站开发网站索引量是什么意思
  • 公司网站制作专业公司python做后台网站的多吗
  • 桂林建站平台哪家好给别人做网站怎么收取费用
  • python做网站显示表格用visual做的网站
  • 彩票网站建设需要什么聊城网站建设首选天成网络
  • 安徽建设工程网站wordpress标签云代码
  • 推荐佛山顺德网站建设手机网站建设域名空间
  • 电子商务网站建设策划书例子企业官网用什么cms系统
  • 网站栏目设计怎么写平面设计接单报价表
  • 做网站美工要学什么网站推广的方法包括
  • 哪个网站可以做笔译兼职wordpress加表单
  • 百度站内搜索 wordpress微餐饮建站费用
  • 用什么做网站的访问量统计制作手工作品
  • 微信公众号搭建网站河南卫生基层系统网站建设
  • steam账号注册网站重庆手机版建站系统哪家好
  • 中新生态城建设局门户网站wordpress云盘视频播放
  • 大型网站开发基本流程wordpress记录用户搜索