spring boot 接口_什么是API接口

spring boot 接口_什么是API接口引言前后端分离、APP交互等,大多都是通过API接口实现的。既然要进行数据交互,那么这接口就得有讲究了:既要实用,又要优雅好看!那么,如何写一套(个)漂亮的API接口呢?一、返回格式API接口要求返回的格式是text/json,我们知道网页返回的格式一般是text/html,因此,SpringBoot为写接口,提供了两种实现方式:类注解和方法注解。类注解@Re…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

写在前面的话

网络程序正朝着移动设备的方向发展,前后端分离、APP,最好的交互交互方式莫过于通过API接口实现。既然要进行数据交互,那么这接口就得有讲究了:既要实用,又要优雅好看!

那么,如何写一套漂亮的API接口呢?

本次我们先了解一下Spring对API接口开发的支持,然后我们采用Spring Boot搭建项目,借用Swagger2列出API接口,便于查阅。

返回格式

API接口要求返回的格式是 application/json,我们知道网页返回的格式一般是 text/html,因此,Spring Boot为写接口,提供了两种实现方式:类注解 和 方法注解。

  • 类注解 @RestController

我们只需要在类上写上注解 @RestController,那么此Controller返回格式就都是text/json。如下图

类注解

  • 方法注解 @ResponseBody

我们只需要在某个方法上写上注解 @ResponseBody,那么该方法返回格式是text/json。如下图

方法注解

值得提醒的是,虽然都是都可以,但我更推荐使用类注解,会显得我们的编码风格十分统一,代码更加紧凑,不至于看起来零散。

我们来看下 @RestController 的源码

RestController

请求方式

@RequestMapping
在RequestMapping的源码中提到,这种支持任意请求方式,类似于自适应。
RequestMapping.png

@GetMapping
客户端只能用 GET 方式请求,适用于查询数据
GetMapping.png

@PostMapping
客户端只能用 POST方式请求,适用于提交数据。
PostMapping.png

@DeleteMapping
客户端只能用 DELETE方式请求,使用于删除数据。
DeleteMapping.png

@PutMapping
客户端只能用 PUT方式请求,使用于修改数据(但在实际使用中,我个人建议还是采用POST方式较为妥当)。
PutMapping.png

以上请求我是在接口开发中经常使用的,图片是注解源码。当然还有其他一些。关于请求方式及使用范围,可以参考 RESTful API

接收参数

  • @RequestParam

我们来写一个示例并说明:

public String getInfo(@RequestParam(name = "param", 
                                        required = false, 
                                        defaultValue = "param dafault value") String param)

name代表提交参数名。
required意思是这个参数是否必需,默认true,没有该参数,无法调用此方法;这里设为false,有无该参数都可以调用。
defaultValue如果该参数值为空,那么就使用默认值。

  • @PathVariable
    @RequestMapping("/get-info/{param}")
    public String getInfo(@PathVariable("param") Object param)

我们可以在请求方法后面直接跟值,省去了 ?参数名=
这种一般配合 @DeleteMapping@PutMapping使用。

  • @RequestHeader

这个使用了获取提交数据的 Headers 的值。我是用来接收 TOKEN。后面会举例。

四、数据格式

下面我们来了解下,Spring Boot 可以支持的数据格式。
我一般常用的基本数据类型有 intString

而我们在日常中,还可能有 ArrayListMap……

那么,Spring Boot支持吗?

这个我就不在这里探讨了,因为格式的原因,我们不会用他。如果你感兴趣,可以去尝试一下。答案嘛,肯定是可以做到的咯。

问题

对于中的问题,我们如何解决?并且统一化呢?

JSON!

毫无疑问JSON可以帮助我们解决这个问题,当然XML也是可以的。

如何用?代码怎么写?前端?移动端都支持吗?

解决方案

我已将代码封装到 JavaLib 库中,所以,我们直接调用。

  • 封装并提交 POST 数据
@Test
public void testPostData() {
    // int
    int pInt = 0;
    // String
    String pString = "String";
    // String []
    String [] pStrings = {"String [0]", "String [1]"};
    // List
    List<String> pLists = List.of("list[0]", "list[1]");
    // 。。

    Map<String, Object> params = new HashMap<>();
    params.put("p-int", pInt);
    params.put("p-string", pString);
    params.put("p-strings", pStrings);
    params.put("p-list", pLists);

    String url = "http://localhost:8080/api/get-info";

    try {
        String rs = HttpUtil.post(url, null, params);
        System.out.println(rs);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
  • 获取POST提交的数据
@RestController
@RequestMapping("/api")
public class APIController {

    @PostMapping("/get-info")
    public String getInfo(HttpServletRequest request) {

        try {
            String jsonStr = RequestUtil.getPostData(request);
            System.out.println(jsonStr);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return "";
    }
}

到这里,我相信你对接口的编写应该游刃有余了吧!可是,我还有东西想要分享给你!

分享

先看 Ajax 代码:

$.ajax({
        headers : {
            Accept: "application/json; charset=utf-8",
            'token' : '9B4BF951093F1F1A40BB2DAAA30B3838'
        },
        url: URI + '/admin/blog/add',
        type: 'POST', 
        async: true,   
        data: {
            ...
        },
        timeout: 3000,   
        dataType: 'json', 
        beforeSend: function(xhr){},
        success: function(data, textStatus, jqXHR){
            console.log(data);
        },
        error: function(xhr, textStatus){
            console.log(xhr);
        },
        complete: function(){}
 })

现在的问题是如何获取 token的值?相信聪明的你,一定还记得我们早就卖好了关子!没错,就是 @RequestHeader("token")!

问题还没结束,如果我们没在Controller,那怎么办?

答案是

    String token = request.getHeader("token");
    System.out.println(token);

更新

之前因为写的公共接口,所以也就写的公共接口文档(参考: 【Work】投递服务API文档 ),采用了 Markdown 格式。

但在实际开发中,我们可能只给前端或者APP写接口,如果还要写接口,那可能是相当麻烦的。所以很多人建议我更新一下。所以抽闲先更新一下,Spring Boot集成Swagger,如果你有兴趣,那就来学习一下吧。

闲话少说,直接看效果:

swagger2.png

代码,请看这里: api-demo ,如果可以请 star。

详细讲解,请看这里: Spring Boot中使用Swagger2构建强大的RESTful API文档

需要你想学习更多,你可以看下: TestController

后记

至此,你一定能写出漂亮、简洁、优雅的API接口。如果你在开发中遇到关于接口的问题,欢迎与我交流!

参考资料:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192207.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SpringBoot+jsp项目启动出现404[通俗易懂]

    SpringBoot+jsp项目启动出现404[通俗易懂]SpringBoot+jsp项目启动出现404

    2022年4月21日
    125
  • Vue props用法小结[通俗易懂]

    Vue props用法小结[通俗易懂]Vue props用法小结

    2022年4月20日
    72
  • HarmonyOS与Android的全面对比

    HarmonyOS与Android的全面对比目录一、前言二、HarmonyOS与Android的对比2.1HarmonyOS并不是Android的替代品2.2系统定位2.3内核对比2.4运行速度三、方舟编译器一、前言这段时间我在寻思这学习一下鸿蒙,第一是因为在着手做一个自己的开源项目,技术选型的时候想到了鸿蒙;第二是我个人非常看好鸿蒙系统的未来,清除明白华为和一些民族企业担负的责任和国人的期待,虽然带着一些民族感情;鸿蒙刚发布的时候自己是非常激动的,但是后来项目太忙一直没有认真的去了解过,这次打算花一部

    2022年6月5日
    90
  • map转换成JSON的方法

    map转换成JSON的方法第一种alibabafalstjson:1.Map转JSONMap<String,Object>map=newHashMap<String,Object>();map.put(“a”,”a”);map.put(“b”,”123″);JSONObjectjson=newJSONO…

    2022年6月20日
    60
  • 操作系统分为用户态和内核态_内核态 用户态

    操作系统分为用户态和内核态_内核态 用户态这节课给你带来了一道非常经典的面试题目:用户态线程和内核态线程有什么区别?这是一个组合型的问题,由很多小问题组装而成,比如:用户态和内核态是什么?用户级线程和内核级线程是一个怎样的对应关系?内核响应系统调用是一个怎样的过程?……而且这个问题还关联到了我们后面要学习的多线程、I/O模型、网络优化等。所以这是一道很不错的面试题目,它不是简单考某个概念,而是通过让求职者比较两种东西,从而考察你对知识整体的认知和理解。今天就请你顺着这个问题,深入学习内核的工作机制,和我一起去理解用户

    2022年9月17日
    3
  • soap java api,SOAP API教程

    soap java api,SOAP API教程ImustmentionthatIwentthroughthisquestionBestsoaptutorials(itmostlyfocusesonAndroidandmyworkisinplainJavanotAndroid)andIamverymuchawarethatSOAPisaprotocolnotanAPI….

    2022年7月26日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号