????????相信大家對這個詞匯并不陌生,通俗來說API就是程序之間的接口,在學(xué)習(xí)和工作中經(jīng)常會調(diào)用別人的API,那么如果我們要做一個自己的API,要如何下手呢。本文將用Spring+JAVA編寫一個簡單的API,過程可供初學(xué)者參考。
? ? ? ? 為了顧及完全沒有經(jīng)驗(yàn)的小白(比如我),本文內(nèi)容將比較詳細(xì)從創(chuàng)建開始講起,大佬可以跳過。
一、創(chuàng)建項(xiàng)目
? ? ? ? 其實(shí)API也是一個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)建一個自己的簡單API
? ? ? ? ?創(chuàng)建項(xiàng)目完成之后我們來簡單說一下配置部分,大多數(shù)時候我們調(diào)用別人的API都是用HTTP方式調(diào)用,這就需要URL,這個步驟我相信常用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)行返回,所以,下面請建立一個Result類實(shí)現(xiàn)通用返回、enums包和utils包存放ResultEnum文件和ResultUtil文件,這兩個文件分別用于枚舉狀態(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),成功時返回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ù)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)用部分我們在另一個JAVA文件中調(diào)用,編寫一個用于調(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)檫@個是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)造一個字符流緩存
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鏈接空閑時才切斷,如果正在被其他線程使用就不切斷。
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
在別的類中調(diào)用該方法就可以啦
//url需要與我們在api中設(shè)置的對應(yīng),后一個是傳參
String s = HttpClientUtil.doPost("http://localhost:12345/api/postTest","true");
System.out.println(s);
看一下返回結(jié)果,我們已經(jīng)成功實(shí)現(xiàn)了調(diào)用
?再看一下傳入"false"時返回的結(jié)果
由此可見我們已經(jīng)實(shí)現(xiàn)了api中的小功能文章來源:http://www.zghlxwxcb.cn/news/detail-690238.html
在實(shí)際開發(fā)中很多時候傳參都會采用json的方式,只要另作修改即可,還有很多種調(diào)用第三方api的方法,這邊就不作贅述了,希望大家天天開心!(*^_^*)文章來源地址http://www.zghlxwxcb.cn/news/detail-690238.html
到了這里,關(guān)于從頭開始用JAVA創(chuàng)建一個自己的簡單API并實(shí)現(xiàn)第三方調(diào)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!