当前位置:   article > 正文

从头开始用JAVA创建一个自己的简单API并实现第三方调用_java写api接口

java写api接口

        相信大家对这个词汇并不陌生,通俗来说API就是程序之间的接口,在学习和工作中经常会调用别人的API,那么如果我们要做一个自己的API,要如何下手呢。本文将用Spring+JAVA编写一个简单的API,过程可供初学者参考。

        为了顾及完全没有经验的小白(比如我),本文内容将比较详细从创建开始讲起,大佬可以跳过。

一、创建项目

        其实API也是一个Spring项目,和别的spring项目没有很大的区别,所以创建项目的过程也是一样的。

        首先选择new project,并选择Spring Inilalizr,如下图所示

        选择Dependencies,此处作为示范勾选常用几项

 点击finish,项目创建成功。

二、创建一个自己的简单API

         创建项目完成之后我们来简单说一下配置部分,大多数时候我们调用别人的API都是用HTTP方式调用,这就需要URL,这个步骤我相信常用Spring的同学都不会陌生,所以我们简要提一下就行。

        ①创建application.yml文件

  1. spring:
  2. datasource:
  3. driver-class-name: com.mysql.cj.jdbc.Driver
  4. url: jdbc:mysql://localhost:3306/my_blog_db?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=UTC
  5. username: root
  6. password: root
  7. mybatis-plus:
  8. mapper-locations: classpath:mapper/*Mapper.xml
  9. type-aliases-package: com.example.test.pojo
  10. server:
  11. port: 12345

        创建完成之后我们的程序就可以开始运行了

        下面正式开始制作API的过程,别人可以用各种方式请求调用你的API(如POSTGET),而我们也要有相应的返回值,返回值基本用通用返回Result类进行返回,所以,下面请建立一个Result类实现通用返回enums包utils包存放ResultEnum文件和ResultUtil文件,这两个文件分别用于枚举状态编写方法,目前的项目结构与代码如下所示:

 Result类代码:

  1. public class Result<T> {
  2. private Integer code;
  3. private String msg;
  4. private T data;
  5. }

ResultUtil类代码:

  1. public enum ResultEnum {
  2. ERROR(-1,"ERROR---------"),
  3. SUCCESS(100,"SUCCESS--------"),
  4. ;
  5. //这样就说明我们具有ERROR和SUCCESS两种状态,成功时返回100,SUCCESS
  6. private Integer code;
  7. private String msg;
  8. ResultEnum(Integer code, String msg) {
  9. this.code = code;
  10. this.msg = msg;
  11. }
  12. public Integer getCode() {
  13. return code;
  14. }
  15. public String getMsg() {
  16. return msg;
  17. }
  18. }

ResultUtil类代码:

  1. public class ResultUtil {
  2. //对应我们在Enum中设置的两种状态
  3. public static Result success(Object object){
  4. Result result = new Result();
  5. result.setCode(ResultEnum.SUCCESS.getCode());
  6. result.setMsg(ResultEnum.SUCCESS.getMsg());
  7. result.setData(object);
  8. return result;
  9. }
  10. public static Result error(Object object){
  11. Result result = new Result();
  12. result.setCode(ResultEnum.ERROR.getCode());
  13. result.setMsg(ResultEnum.ERROR.getMsg());
  14. result.setData(object);
  15. return result;
  16. }
  17. }

 下面我们来编写主体部分,在Controller中编写,确定我们要以什么方式让用户调用,此处采用POST方式演示使用,大家也可以自己编写GET方式。

  1. @RestController
  2. @RequestMapping("/api")
  3. public class TestController {
  4. @PostMapping("/postTest")
  5. public Result postTest(@RequestBody boolean flag) throws Exception{
  6. /*
  7. *调用时传入一个参数flag,如果flag值不为true就返回成功数据,否则返回失败数据
  8. */
  9. System.out.println("已进入api接口------");
  10. System.out.println(flag);
  11. if(flag==true){
  12. return ResultUtil.success("返回成功数据Congraduations!");
  13. }
  14. return ResultUtil.error("抱歉sorry!");
  15. }
  16. }

        到这里我们已经写完我们的简单API了,是不是看起来平平无奇?是的,我们的API只是演示使用,而API本身并不是什么特别高大上的东西,不过我们既然已经写完了,那我们就来试试看调用我们的API吧。

三、实现第三方调用

        调用部分我们在另一个JAVA文件中调用,编写一个用于调用API的类HTTPClientUtil

  1. public class HttpClientUtil {
  2. public static String doPost(String pathUrl, String data){
  3. OutputStreamWriter out = null;
  4. BufferedReader br = null;
  5. String result = "";
  6. try {
  7. URL url = new URL(pathUrl);
  8. //打开和url之间的连接
  9. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  10. //请求方法为"POST"
  11. conn.setRequestMethod("POST");
  12. // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true, 默认情况下是false;
  13. conn.setDoOutput(true);
  14. // Post请求不能使用缓存
  15. conn.setUseCaches(false);
  16. //设置请求属性
  17. conn.setRequestProperty("accept", "*/*");
  18. conn.setRequestProperty("connection", "Keep-Alive"); //维持长链接
  19. conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
  20. conn.connect();
  21. //调用,获取输出流
  22. out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
  23. //发送请求参数
  24. out.write(data);
  25. out.flush();
  26. //获取URLConnection对象对应的输入流
  27. InputStream is = conn.getInputStream();
  28. //构造一个字符流缓存
  29. br = new BufferedReader(new InputStreamReader(is));
  30. String str = "";
  31. while ((str = br.readLine()) != null){
  32. result += str;
  33. }
  34. System.out.println(result);
  35. //关闭流
  36. is.close();
  37. //断开连接,disconnect是在底层tcp socket链接空闲时才切断,如果正在被其他线程使用就不切断。
  38. conn.disconnect();
  39. } catch (Exception e) {
  40. e.printStackTrace();
  41. }
  42. return result;
  43. }
  44. }

在别的类中调用该方法就可以啦

  1. //url需要与我们在api中设置的对应,后一个是传参
  2. String s = HttpClientUtil.doPost("http://localhost:12345/api/postTest","true");
  3. System.out.println(s);

看一下返回结果,我们已经成功实现了调用

 再看一下传入"false"时返回的结果

由此可见我们已经实现了api中的小功能

在实际开发中很多时候传参都会采用json的方式,只要另作修改即可,还有很多种调用第三方api的方法,这边就不作赘述了,希望大家天天开心!(*^_^*)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/199617
推荐阅读
相关标签
  

闽ICP备14008679号