Java接口的含义,如何调用第三方接口


友情提醒: 本文部分内容使用AI文心一言创作

先看文章目录,大致了解文章知识点结构,点击文章目录可直接跳转到文章指定位置。

第一章、快速了解接口

1.1)接口概念

硬件接口:硬件接口是指不同硬件设备之间的连接部分,用于实现设备间的数据传输和控制信号传递等。常见的有USB接口、耳机接口、HDMI接口等。

用户界面接口:用户界面(User Interface)也常被称为接口,它是人与计算机之间的交互媒介,如电脑的操作系统等。用户界面使得用户可以方便地与计算机进行信息交换和控制操作。一般有命令接口、程序接口、图形接口三种。

软件接口:是指不同软件组件之间的通信协议或标准,狭义上是指软件本身的狭义“接口”,用于实现不同软件之间的交互和信息共享。常见的有API接口,也称为应用编程接口。

1.2)狭义的软件接口

①软件本身接口介绍
软件接口通常由请求协议、请求服务器地址、请求服务器地址的端口、接口地址、接口参数等几部分构成。分为以下几种类型:RESTful接口、GraphQL接口、SOAP接口、gRPC接口、消息队列接口、FTP接口等等。

②软件接口作用:
1、安全性提高:软件接口的重要作用是把组件的具体实现隐蔽起来(称为封装 ),组件的使用者只需要了解接口而不需要知道组件的具体实现。

2、定义功能规范:避免子类编码的随意性,当需要扩展新的功能时,子类只需要实现接口,便知道需要重写哪些功能,增加哪些新功能。

3、程序的解耦:通过接口定义统一规范,使用接口类型来接收实现类型对象(多态)。好处是将来调用对象时,只需要通过接口来调用即可,从而实现了程序的解耦。

4、复用性增加,维护成本降低:提高开发效率,接口可以多实现,多继承。一个类除了实现接口之外,还可以继承其它类。使项目分离,所有层都面向接口开发,从而提高开发效率。接口可以使代码和代码之间的耦合度降低,变得可插拔,可切换。

总结:软件接口是个抽象的概念,没法具体描述它是什么。只能抽象的说接口遵守着请求协议,是用来实现不同系统或组件之间进行数据交换和信息共享的

1.3)WEB接口的概念

宽泛的概念:WEB接口
Web接口通常指的是一个完整的Web应用程序或网站的后端接口,它为前端页面提供数据和功能支持。Web接口可以与多种协议配合使用,包括HTTP协议,但也可以使用其他协议,如Websocket、TCP等。Web接口的实现方式可以是多种多样的,例如使用Spring Boot框架可以快速开发出基于Java的Web接口。

HTTP接口通常指的是基于HTTP协议的API接口,它是一种常用的Web接口方式。

1.3.1) 前后端交互过程介绍:HTTP接口

比如我postman发送一个JSON格式的数据到后端,进行传输这个过程中:
1、前端向后端发送HTTP请求获取数据或执行某些操作。HTTP的请求方法(post)、请求头、请求体内容就是json串
2、后端Controller方法通常接收HTTP请求,根据路径接收到请求后执行相应的逻辑处理
3、将结果封装成HTTP响应(response)返回给前端,HTTP响应包含状态码、响应头和响应体。控制器方法通常会使用模型(Model)来存储数据,并通过视图(View)呈现给前端。
4、前端收到响应后,可以根据响应的内容进行相应的处理和展示。

HTTP接口
基于TCP协议的接口,现在浏览器客户端与服务器端通信基本都是采用HTTP协议。SpringCloud框架,各个服务间也是通过HTTP方式(feign)来实现的。HTTP API接口是走HTTP协议,通过路径来区分调用的方法 ,请求报文都是key-value形式的,返回报文一般都是json串。

1、请求方法:常见的HTTP请求方法包括GET、POST、PUT、DELETE等。每种方法规定了客户与服务器联系的类型不同。例如,GET方法用于获取数据,而POST方法用于提交表单或上传文件。
2、请求头:HTTP请求头包含了一些关于请求的附加信息,如请求的主机名、内容类型、内容长度等。这些信息有助于服务器更好地处理请求。
3、响应:HTTP响应包含状态码、响应头和响应体。状态码表示请求的处理结果,如200表示成功,404表示未找到资源。响应头包含了一些关于响应的附加信息,如内容类型、内容长度等。响应体包含实际的数据内容。
4、跨域资源共享(CORS):为了解决浏览器的同源策略限制,引入了CORS机制。CORS允许一个网页的脚本向另一个域的服务器发送跨域请求。通过设置HTTP响应头,可以实现CORS功能,允许或限制跨域请求。
5、安全性:HTTP协议本身不提供加密功能,因此不保证数据的机密性和完整性。为了保护敏感数据,通常使用HTTPS协议代替HTTP协议,通过SSL/TLS协议对传输的数据进行加密。

HTTP接口的实现方式有很多种
1、原生HTTP协议:使用原生HTTP协议进行接口开发,需要自己编写请求和响应的处理逻辑。这种方式比较简单,但是需要自己处理很多细节,容易出错。
2、RESTful API:RESTful API是一种基于HTTP协议的轻量级接口风格,它使用不同的HTTP方法和URI来定义资源操作。RESTful API是目前最为流行的HTTP接口实现方式之一,它具有简单、清晰、易于理解的特点。
3、SOAP接口:SOAP(Simple Object Access Protocol)接口是一种基于XML的远程调用(RPC)协议,它使用HTTP协议进行通信,并采用SOAP格式的消息进行数据交换。SOAP接口可以实现跨平台、跨语言的应用程序集成和互操作性。
4、GraphQL接口:GraphQL是一种用于API的查询语言,它允许客户端精确地指定需要的数据,而不是依赖于服务器端的数据返回。GraphQL接口使用HTTP协议进行通信,并采用GraphQL查询语言进行数据请求。

1.3.3)springboot对外提供的接口:RESTful接口

我们经常说RESTful接口,其实它也是基于HTTP协议。所以可以说它是基于HTTP接口基础上追加的一种接口设计风格和规范,使用的还是HTTP协议的各种方法(如GET、POST、PUT、DELETE等)来对资源进行操作。
springboot对外提供的就是RESTful接口,
1、即基于HTTP协议,
2、使用HTTP方法进行资源操作
3、使用JSON格式来传输数据
4、采用URL来唯一标识资源
5、区别主要在于表达形式和请求方法上,HTTP接口更加灵活,而RESTful接口更规范化。

1.3.4) SpringCloud微服务组件OpenFeign: RPC接口

OpenFegin 是微服务中用来进行远程服务调用的组件:
1、将服务注册到服务中心
2、导入OpenFeign的依赖,在启动类上使用@EnableFeignClients这样就会对有@FeignClient注解的包进行扫描
3、接下来在调用端新建被调用端的接口映射,映射上加@FeignClient注解。
4、然后我们久可以像调用本地方法一样来调用远程服务。

OpenFeign基于HTTP协议的RPC组件。它通过HTTP请求和响应进行通信,简化在基于SpringCloud微服务环境下完成服务间调用的开发,类似于在浏览器中发送HTTP请求来获取数据的方式。 OpenFeign是用于定义和调用HTTP接口的工具。可以认为是RPC接口的一种实现.

RPC接口:
这个接口相当于定义了一种规范,是一种远程过程调用协议,它允许在不同的计算机之间进行通信,并调用远程过程或方法。RPC接口定义了一种规范,使得不同的程序或系统之间可以相互调用服务。客户端程序通过网络向服务器程序发送请求,请求中包含了要调用的远程过程名称和参数。服务器程序接收到请求后,执行相应的远程过程,并将结果返回给客户端程序。客户端程序和服务器程序之间的通信协议和数据格式通常由RPC接口定义。

第二章、接口调用

2.1)其他人调用我们写好的接口

我们要提供请求地址,请求方式,请求参数,参数类型等给调用者。
这些东西一般写在接口文档里,下面是个简单的接口文档:
在这里插入图片描述

2.2)我们调用其他人提供的第三方接口:

①获取接口文档:获取第三方接口的API文档,文档里包含请求方式、请求参数、响应格式等信息

②配置请求参数:根据API文档,配置请求参数,包括请求地址、请求方式、请求参数等。

③测试接口:验证接口的正确性和可用性。测试可以通过编写测试用例、模拟请求等方式进行。

④正式发送请求:使用编程语言提供的库或框架,发送请求。如果需要认证,在请求头中添加认证信息。

⑤获得响应:正式调用后,第三方接口会返回内容。如果失败,根据错误码和错误信息进行处理。如果成功,根据返回的内容信息进行处理。

2.3)调用第三方接口的方式:

①Java内置的Java.net.HttpURLConnection类

但是我们这里不说

②通过Apache封装好的HttpClient工具包;

导入依赖:

<dependency>  
    <groupId>org.apache.httpcomponents</groupId>  
    <artifactId>httpclient</artifactId>  
    <version>4.5.13</version>  
</dependency>

调用示例:
1、创建了一个CloseableHttpClient实例。
2、创建一个HttpGet请求。
3、发送并获取响应状态码、响应实体,并打印输出响应内容。
4、关闭响应和HttpClient实例。

import org.apache.http.HttpEntity;  
import org.apache.http.HttpResponse;  
import org.apache.http.client.methods.CloseableHttpResponse;  
import org.apache.http.client.methods.HttpGet;  
import org.apache.http.impl.client.CloseableHttpClient;  
import org.apache.http.impl.client.HttpClients;  
import org.apache.http.util.EntityUtils;  
  
public class HttpClientExample {  
    public static void main(String[] args) throws Exception {  
        // 创建HttpClient实例  
        CloseableHttpClient httpClient = HttpClients.createDefault();  
  
        // 创建HttpGet请求  
        HttpGet httpGet = new HttpGet("http://example.com/api/endpoint");  
  
        // 发送HTTP请求并获取响应  
        CloseableHttpResponse response = httpClient.execute(httpGet);  
        try {  
            // 获取响应状态码  
            int statusCode = response.getStatusLine().getStatusCode();  
            System.out.println("Response Status Code: " + statusCode);  
  
            // 获取响应实体  
            HttpEntity entity = response.getEntity();  
            if (entity != null) {  
                // 获取响应内容并打印输出  
                String responseBody = EntityUtils.toString(entity);  
                System.out.println("Response Body: " + responseBody);  
            }  
        } finally {  
            // 关闭响应和HttpClient实例  
            response.close();  
            httpClient.close();  
        }  
    }  
}

③通过SpringBoot框架提供的RestTemplate;

导入依赖:

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId>  
</dependency>

调用示例:
1、创建了一个RestTemplate实例。
2、创建了一个HttpHeaders对象,并设置了Content-Type为application/json。
3、创建了一个HttpEntity对象,将请求体和头部信息传递给它。
4、使用RestTemplate的exchange方法发送POST请求,并获取响应体。

import org.springframework.http.HttpEntity;  
import org.springframework.http.HttpHeaders;  
import org.springframework.http.HttpMethod;  
import org.springframework.http.ResponseEntity;  
import org.springframework.web.client.RestTemplate;  
  
public class ThirdPartyService {  
    private final RestTemplate restTemplate = new RestTemplate();  
  
    public String callThirdPartyApi(String url, String requestBody) {  
        HttpHeaders headers = new HttpHeaders();  
        headers.add("Content-Type", "application/json");  
        HttpEntity<String> entity = new HttpEntity<>(requestBody, headers);  
        ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);  
        return response.getBody();  
    }  
}

④通过Square公司开发的OkHttp框架

OkHttp用于替代HttpUrlConnection和Apache HttpClient。
添加依赖

<dependency>  
    <groupId>com.squareup.okhttp3</groupId>  
    <artifactId>okhttp</artifactId>  
    <version>5.0.0-alpha.2</version>  
</dependency>

1、创建一个OkHttpClient实例。
2、使用Request.Builder构建一个Request对象,指定了要调用的API接口的URL。
3、通过client.newCall(request)创建一个Call对象,然后通过调用execute()方法执行请求并获取Response对象。
4、通过response.body().string()获取字符串形式的响应内容
5、对于更复杂的API调用,可以使用OkHttp的RequestBody和ResponseBody类来构建和解析请求和响应体。

import okhttp3.*;  
  
public class OkHttpExample {  
    public static void main(String[] args) throws Exception {  
        OkHttpClient client = new OkHttpClient();  
  
        Request request = new Request.Builder()  
                .url("http://example.com/api/endpoint")  
                .build();  
  
        try (Response response = client.newCall(request).execute()) {  
            if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);  
  
            System.out.println(response.body().string());  
        }  
    }  
}
  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值