教你从头开始用JAVA创建一个自己的简单API并实现第三方调用

 更新时间:2023年12月08日 15:45:23   作者:月色入户  
在日常开发的时候,经常会遇到需要调用别人的接口的场景,下面这篇文章主要给大家介绍了关于如何从头开始用JAVA创建一个自己的简单API并实现第三方调用的相关资料,需要的朋友可以参考下

前言

相信大家对这个词汇并不陌生,通俗来说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(如POSTGET),而我们也要有相应的返回值,返回值基本用通用返回Result类进行返回,所以,下面请建立一个Result类实现通用返回enums包utils包存放ResultEnum文件和ResultUtil文件,这两个文件分别用于枚举状态编写方法,目前的项目结构与代码如下所示:

 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两种状态,成功时返回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的方法,这边就不作赘述了!

总结

到此这篇关于从头开始用JAVA创建一个自己的简单API并实现第三方调用的文章就介绍到这了,更多相关JAVA创建API并第三方调用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java的动态代理和静态代理及反射常用API详解

    Java的动态代理和静态代理及反射常用API详解

    这篇文章主要介绍了Java的动态代理和静态代理及反射常用API详解,动态代理是一种在运行时动态生成代理对象的技术,它是一种设计模式,用于在不修改原始对象的情况下,通过代理对象来间接访问原始对象,并在访问前后执行额外的操作,需要的朋友可以参考下
    2024-01-01
  • Jar打包用法详解

    Jar打包用法详解

    这篇文章主要介绍了Jar打包用法,详解分析了jar打包命令的各种常见用法及参数含义,非常具有实用价值,需要的朋友可以参考下
    2014-12-12
  • 解决maven没有打包xml文件的问题

    解决maven没有打包xml文件的问题

    这篇文章主要介绍了解决maven没有打包xml文件的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • SpringBoot将多个文件夹进行压缩的两种方法(浏览器下载和另存为)

    SpringBoot将多个文件夹进行压缩的两种方法(浏览器下载和另存为)

    Spring Boot项目通常不会自动对文件夹进行压缩,不过,在打包应用时,如果你使用了Maven或Gradle这样的构建工具,并且配置了相应的插件,可以在打成jar或war包的时候将依赖的库文件合并并压缩,本文介绍了SpringBoot将多个文件夹进行压缩的两种方法
    2024-07-07
  • Spring Boot和Vue跨域请求问题原理解析

    Spring Boot和Vue跨域请求问题原理解析

    这篇文章主要介绍了Spring Boot和Vue跨域请求问题原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Hadoop多Job并行处理的实例详解

    Hadoop多Job并行处理的实例详解

    这篇文章主要介绍了Hadoop多Job并行处理的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-10-10
  • Java Nacos与Gateway的使用操作笔记

    Java Nacos与Gateway的使用操作笔记

    Spring Cloud Gateway 是一个用于构建 API 网关的框架,提供了多种服务路由、过滤和负载均衡的功能,这篇文章主要介绍了Java Nacos与Gateway的使用操作笔记,需要的朋友可以参考下
    2024-08-08
  • String与Blob互转和file文件与Blob互转方式

    String与Blob互转和file文件与Blob互转方式

    这篇文章主要介绍了String与Blob互转和file文件与Blob互转方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 浅谈Java响应式系统

    浅谈Java响应式系统

    第一次听到reactive这个词还是在几年前,偶然了解到了Rxjava这个项目,仿佛为我打开了一扇新的大门,Rxjava是ReactiveX的java实现,ReactiveX家族除了Rxjava还有RxJS, Rx.NET,RxScala等等。
    2021-06-06
  • 使用Springboot注解形式进行模糊查询

    使用Springboot注解形式进行模糊查询

    这篇文章主要介绍了使用Springboot注解形式进行模糊查询的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07

最新评论