教你從頭開始用JAVA創(chuàng)建一個(gè)自己的簡單API并實(shí)現(xiàn)第三方調(diào)用
前言
相信大家對這個(gè)詞匯并不陌生,通俗來說API就是程序之間的接口,在學(xué)習(xí)和工作中經(jīng)常會調(diào)用別人的API,那么如果我們要做一個(gè)自己的API,要如何下手呢。本文將用Spring+JAVA編寫一個(gè)簡單的API,過程可供初學(xué)者參考。
為了顧及完全沒有經(jīng)驗(yàn)的小白(比如我),本文內(nèi)容將比較詳細(xì)從創(chuàng)建開始講起,大佬可以跳過。
一、創(chuàng)建項(xiàng)目
其實(shí)API也是一個(gè)Spring項(xiàng)目,和別的spring項(xiàng)目沒有很大的區(qū)別,所以創(chuàng)建項(xiàng)目的過程也是一樣的。
首先選擇new project,并選擇Spring Inilalizr,如下圖所示

選擇Dependencies,此處作為示范勾選常用幾項(xiàng)

點(diǎn)擊finish,項(xiàng)目創(chuàng)建成功。
二、創(chuàng)建一個(gè)自己的簡單API
創(chuàng)建項(xiàng)目完成之后我們來簡單說一下配置部分,大多數(shù)時(shí)候我們調(diào)用別人的API都是用HTTP方式調(diào)用,這就需要URL,這個(gè)步驟我相信常用Spring的同學(xué)都不會陌生,所以我們簡要提一下就行。
①創(chuàng)建application.yml文件
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/my_blog_db?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=UTC
username: root
password: root
mybatis-plus:
mapper-locations: classpath:mapper/*Mapper.xml
type-aliases-package: com.example.test.pojo
server:
port: 12345創(chuàng)建完成之后我們的程序就可以開始運(yùn)行了
下面正式開始制作API的過程,別人可以用各種方式請求調(diào)用你的API(如POST、GET),而我們也要有相應(yīng)的返回值,返回值基本用通用返回Result類進(jìn)行返回,所以,下面請建立一個(gè)Result類實(shí)現(xiàn)通用返回、enums包和utils包存放ResultEnum文件和ResultUtil文件,這兩個(gè)文件分別用于枚舉狀態(tài)與編寫方法,目前的項(xiàng)目結(jié)構(gòu)與代碼如下所示:

Result類代碼:
public class Result<T> {
private Integer code;
private String msg;
private T data;
}ResultUtil類代碼:
public enum ResultEnum {
ERROR(-1,"ERROR---------"),
SUCCESS(100,"SUCCESS--------"),
;
//這樣就說明我們具有ERROR和SUCCESS兩種狀態(tài),成功時(shí)返回100,SUCCESS
private Integer code;
private String msg;
ResultEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
}ResultUtil類代碼:
public class ResultUtil {
//對應(yīng)我們在Enum中設(shè)置的兩種狀態(tài)
public static Result success(Object object){
Result result = new Result();
result.setCode(ResultEnum.SUCCESS.getCode());
result.setMsg(ResultEnum.SUCCESS.getMsg());
result.setData(object);
return result;
}
public static Result error(Object object){
Result result = new Result();
result.setCode(ResultEnum.ERROR.getCode());
result.setMsg(ResultEnum.ERROR.getMsg());
result.setData(object);
return result;
}
}下面我們來編寫主體部分,在Controller中編寫,確定我們要以什么方式讓用戶調(diào)用,此處采用POST方式演示使用,大家也可以自己編寫GET方式。
@RestController
@RequestMapping("/api")
public class TestController {
@PostMapping("/postTest")
public Result postTest(@RequestBody boolean flag) throws Exception{
/*
*調(diào)用時(shí)傳入一個(gè)參數(shù)flag,如果flag值不為true就返回成功數(shù)據(jù),否則返回失敗數(shù)據(jù)
*/
System.out.println("已進(jìn)入api接口------");
System.out.println(flag);
if(flag==true){
return ResultUtil.success("返回成功數(shù)據(jù)Congraduations!");
}
return ResultUtil.error("抱歉sorry!");
}
}到這里我們已經(jīng)寫完我們的簡單API了,是不是看起來平平無奇?是的,我們的API只是演示使用,而API本身并不是什么特別高大上的東西,不過我們既然已經(jīng)寫完了,那我們就來試試看調(diào)用我們的API吧。
三、實(shí)現(xiàn)第三方調(diào)用
調(diào)用部分我們在另一個(gè)JAVA文件中調(diào)用,編寫一個(gè)用于調(diào)用API的類HTTPClientUtil
public class HttpClientUtil {
public static String doPost(String pathUrl, String data){
OutputStreamWriter out = null;
BufferedReader br = null;
String result = "";
try {
URL url = new URL(pathUrl);
//打開和url之間的連接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//請求方法為"POST"
conn.setRequestMethod("POST");
// 設(shè)置是否向httpUrlConnection輸出,因?yàn)檫@個(gè)是post請求,參數(shù)要放在http正文內(nèi),因此需要設(shè)為true, 默認(rèn)情況下是false;
conn.setDoOutput(true);
// Post請求不能使用緩存
conn.setUseCaches(false);
//設(shè)置請求屬性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive"); //維持長鏈接
conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
conn.connect();
//調(diào)用,獲取輸出流
out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
//發(fā)送請求參數(shù)
out.write(data);
out.flush();
//獲取URLConnection對象對應(yīng)的輸入流
InputStream is = conn.getInputStream();
//構(gòu)造一個(gè)字符流緩存
br = new BufferedReader(new InputStreamReader(is));
String str = "";
while ((str = br.readLine()) != null){
result += str;
}
System.out.println(result);
//關(guān)閉流
is.close();
//斷開連接,disconnect是在底層tcp socket鏈接空閑時(shí)才切斷,如果正在被其他線程使用就不切斷。
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}在別的類中調(diào)用該方法就可以啦
//url需要與我們在api中設(shè)置的對應(yīng),后一個(gè)是傳參
String s = HttpClientUtil.doPost("http://localhost:12345/api/postTest","true");
System.out.println(s);看一下返回結(jié)果,我們已經(jīng)成功實(shí)現(xiàn)了調(diào)用

再看一下傳入"false"時(shí)返回的結(jié)果

由此可見我們已經(jīng)實(shí)現(xiàn)了api中的小功能
在實(shí)際開發(fā)中很多時(shí)候傳參都會采用json的方式,只要另作修改即可,還有很多種調(diào)用第三方api的方法,這邊就不作贅述了!
總結(jié)
到此這篇關(guān)于從頭開始用JAVA創(chuàng)建一個(gè)自己的簡單API并實(shí)現(xiàn)第三方調(diào)用的文章就介紹到這了,更多相關(guān)JAVA創(chuàng)建API并第三方調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBatch數(shù)據(jù)讀取的實(shí)現(xiàn)(ItemReader與自定義讀取邏輯)
本文主要介紹了SpringBatch數(shù)據(jù)讀取的實(shí)現(xiàn), 文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
深入淺析Mybatis與Hibernate的區(qū)別與用途
這篇文章主要介紹了Mybatis與Hibernate的區(qū)別與用途的相關(guān)資料,需要的朋友可以參考下2017-10-10
RabbitMQ冪等性與優(yōu)先級及惰性詳細(xì)全面講解
關(guān)于MQ消費(fèi)者的冪等性問題,在于MQ的重試機(jī)制,因?yàn)榫W(wǎng)絡(luò)原因或客戶端延遲消費(fèi)導(dǎo)致重復(fù)消費(fèi)。使用MQ重試機(jī)制需要注意的事項(xiàng)以及如何解決消費(fèi)者冪等性與優(yōu)先級及惰性問題以下將逐一講解2022-11-11
Java線程編程中Thread類的基礎(chǔ)學(xué)習(xí)教程
這篇文章主要介紹了Java線程編程中Thread類的基礎(chǔ)學(xué)習(xí)教程,Thread類包含諸多操作線程的方法,非常重要,需要的朋友可以參考下2015-12-12

