相信大家对这个词汇并不陌生,通俗来说API就是程序之间的接口,在学习和工作中经常会调用别人的API,那么如果我们要做一个自己的API,要如何下手呢。本文将用Spring+JAVA编写一个简单的API,过程可供初学者参考。
为了顾及完全没有经验的小白(比如我),本文内容将比较详细从创建开始讲起,大佬可以跳过。
一、创建项目
其实API也是一个Spring项目,和别的spring项目没有很大的区别,所以创建项目的过程也是一样的。
首先选择new project,并选择Spring Inilalizr,如下图所示
选择Dependencies,此处作为示范勾选常用几项
点击finish,项目创建成功。
二、创建一个自己的简单API
创建项目完成之后我们来简单说一下配置部分,大多数时候我们调用别人的API都是用HTTP方式调用,这就需要URL,这个步骤我相信常用Spring的同学都不会陌生,所以我们简要提一下就行。
①创建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
创建完成之后我们的程序就可以开始运行了
下面正式开始制作API的过程,别人可以用各种方式请求调用你的API(如POST、GET),而我们也要有相应的返回值,返回值基本用通用返回Result类进行返回,所以,下面请建立一个Result类实现通用返回、enums包和utils包存放ResultEnum文件和ResultUtil文件,这两个文件分别用于枚举状态与编写方法,目前的项目结构与代码如下所示:
Result类代码:
public class Result{ private Integer code; private String msg; private T data; }
ResultUtil类代码:
public enum ResultEnum { ERROR(-1,"ERROR---------"), SUCCESS(100,"SUCCESS--------"), ; //这样就说明我们具有ERROR和SUCCESS两种状态,成功时返回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 { //对应我们在Enum中设置的两种状态 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中编写,确定我们要以什么方式让用户调用,此处采用POST方式演示使用,大家也可以自己编写GET方式。
@RestController @RequestMapping("/api") public class TestController { @PostMapping("/postTest") public Result postTest(@RequestBody boolean flag) throws Exception{ /* *调用时传入一个参数flag,如果flag值不为true就返回成功数据,否则返回失败数据 */ System.out.println("已进入api接口------"); System.out.println(flag); if(flag==true){ return ResultUtil.success("返回成功数据Congraduations!"); } return ResultUtil.error("抱歉sorry!"); } }
到这里我们已经写完我们的简单API了,是不是看起来平平无奇?是的,我们的API只是演示使用,而API本身并不是什么特别高大上的东西,不过我们既然已经写完了,那我们就来试试看调用我们的API吧。
三、实现第三方调用
调用部分我们在另一个JAVA文件中调用,编写一个用于调用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"); // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true, 默认情况下是false; conn.setDoOutput(true); // Post请求不能使用缓存 conn.setUseCaches(false); //设置请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); //维持长链接 conn.setRequestProperty("Content-Type", "application/json;charset=utf-8"); conn.connect(); //调用,获取输出流 out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); //发送请求参数 out.write(data); out.flush(); //获取URLConnection对象对应的输入流 InputStream is = conn.getInputStream(); //构造一个字符流缓存 br = new BufferedReader(new InputStreamReader(is)); String str = ""; while ((str = br.readLine()) != null){ result += str; } System.out.println(result); //关闭流 is.close(); //断开连接,disconnect是在底层tcp socket链接空闲时才切断,如果正在被其他线程使用就不切断。 conn.disconnect(); } catch (Exception e) { e.printStackTrace(); } return result; } }
在别的类中调用该方法就可以啦
//url需要与我们在api中设置的对应,后一个是传参 String s = HttpClientUtil.doPost("http://localhost:12345/api/postTest","true"); System.out.println(s);
看一下返回结果,我们已经成功实现了调用
再看一下传入"false"时返回的结果
由此可见我们已经实现了api中的小功能
在实际开发中很多时候传参都会采用json的方式,只要另作修改即可,还有很多种调用第三方api的方法,这边就不作赘述了,希望大家天天开心!(*^_^*)
猜你喜欢
- 11天前(四川率先建立“双定向”基层文化人才职称评审通道机制)四川率先建立“双定向”基层文化人才职称评审通道机制
- 11天前(万达酒店及度假村连续五年荣获“中国饭店集团60强”)万达酒店及度假村连续五年荣获“中国饭店集团60强”
- 11天前(艾美酒店连锁)艾美酒店全球夏日计划回归,联手Wishbone主厨推出创新冰饮
- 11天前(河南省文旅大会精神)2025河南省文化旅游发展大会新闻发布会在郑州召开
- 11天前(曼谷丽思卡尔顿公寓价格)在曼谷丽思卡尔顿酒店CALEŌ 邂逅鸡尾酒的浪漫艺术
- 11天前(071 圣安东尼奥)秋季 圣安东尼奥交出了私藏活动清单
- 11天前(曼谷丽思卡尔顿公寓价格)曼谷丽思卡尔顿酒店盛大启幕,开创泰国奢华雅致新纪元
- 11天前(中国最好的避暑山庄)2025中国十大避暑山庄评选揭晓,澳涞山庄夺魁
- 11天前(苏梅岛普吉岛哪个好玩)苏梅岛金普顿基塔蕾度假酒店推出家庭度假套餐
- 11天前(辽宁新增6个国家4a级旅游景区有哪些)辽宁新增6个国家4A级旅游景区
网友评论
- 搜索
- 最新文章
- (2020广州车展哈弗)你的猛龙 独一无二 哈弗猛龙广州车展闪耀登场
- (哈弗新能源suv2019款)智能科技颠覆出行体验 哈弗重塑新能源越野SUV价值认知
- (2021款全新哈弗h5自动四驱报价)新哈弗H5再赴保障之旅,无惧冰雪护航哈弗全民电四驱挑战赛
- (海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
- (visa jcb 日本)优惠面面俱到 JCB信用卡邀您畅玩日本冰雪季
- (第三届“堡里有年味·回村过大年”民俗花灯会活动)第三届“堡里有年味·回村过大年”民俗花灯会活动
- (展示非遗魅力 长安启源助力铜梁龙舞出征)展示非遗魅力 长安启源助力铜梁龙舞出征
- (阿斯塔纳航空公司)阿斯塔纳航空机队飞机数量增至50架
- (北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
- (我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉)我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉
- 热门文章