【Spring Boot】构建RESTful服务 — 构建RESTful应用接口

构建RESTful应用接口

RESTful架构是目前最流行的互联网软件架构规范,是Web API(应用编程接口)的大趋势和主流规范,了解了RESTful的众多优点之后,接下来一步一步地学习如何使用Spring Boot构建RESTful Web API。

1.Spring Boot对RESTful的支持

Spring Boot提供的spring-boot-starter-web组件完全支持开发RESTful API,提供了与REST操作方式(GET、POST、PUT、DELETE)对应的注解:

1)@GetMapping:处理GET请求,获取资源。

2)@PostMapping:处理POST请求,新增资源。

3)@PutMapping:处理PUT请求,更新资源。

4)@DeleteMapping:处理DELETE请求,删除资源。

5)@PatchMapping:处理PATCH请求,用于部分更新资源。

通过这些注解就可以在Spring Boot项目中轻松构建RESTful接口。其中比较常用的是@GetMapping@PostMapping@PutMapping@DeleteMapping四个注解。

使用Spring Boot开发RESTful接口非常简单,通过@RestController定义控制器,然后使用@GetMapping@PostMapping等注解定义地址映射,实现相应的资源操作方法即可。

    @GetMapping(value="/user/{id}")
    public String getUserByID(@PathVariable int id){
        return "getUserByID:"+id;
    }
    @PostMapping(value="/user")
    public String save(User user) {
        return "save successed";
    }
    @PutMapping(value="/user")
    public String update(User user){
        return "update successed";
        }
    @DeleteMapping(value="/{id}")
    public String delete(@PathVariable int id){
        return "delete id:"+id;
    }

在上面的示例中,通过Spring Boot提供的@GetMapping等注解简单实现了对用户(user)的操作。其实,这些注解就是@RequestMapping注解的简化:

    @RequestMapping(value = "/user/(id}", method = RequestMethod.GET)
    public String getUserByID(@PathVariable int id){
        return "getUserByID:"+id;
    }
    @RequestMapping(value ="/user", method = RequestMethod.POST)
    public String save(User user) {
        return "save successed";
    }
    @RequestMapping(value ="/user", method = RequestMethod.PUT)
    public String update(User user){
        return "update successed";
    }
    @RequestMapping(value = "/user/{id}", method = RequestMethod.DELETE)
    public String delete(@PathVariable int id) {
        return "delete id:" + id;
    }

之前介绍的@RequestMapping注解通过method参数定义映射的HTTP请求方法,就相当于@RequestMapping+ RequestMethod的简化版。

我们看到,Get和Delete、Post和Put请求的URL是相同的,不同的Method(GET、PUT、POST、DELETE)会被映射到对应的处理方法上。这就是REST的魅力,简单明了的URL就能显示它的功能和作用。

2.Spring Boot实现RESTful API

接下来根据之前介绍的RESTful设计风格,以用户管理模块为例演示Spring Boot如何实现RESTful API。

步骤01 设计API。

在RESTful架构中,每个网址代表一种资源,所以URI中建议不要包含动词,只包含名词即可,而且所用的名词往往与数据库的表格名对应。下表是用户管理模块的接口定义,实际项目的RESTful API文档要更详细,还会定义全部请求的数据结构体。

在这里插入图片描述
表中定义了用户管理模块的接口,根据REST的定义,我们将用户定义为一种资源,通过POST、DELETE、PUT、GET等HTTP Method实现对用户的增、删、改、查。

可能大家会有疑问,为什么URI中没有我们习惯的getUser、saveUser这类路径?这正是RESTful优雅的地方,它将对资源的操作都定义在HTTP Method中,使得URL地址看起来更简洁。

除了设计URL接口之外,还需要定义服务端向客户端返回的状态码和提示信息。详细的状态码说明见下表。

在这里插入图片描述
表中除了定义用户管理相关的业务状态码之外,还需要定义通用的错误码,如400对应数据校验错误、401对应数据无权限等。

步骤02 实现用户管理接口。

上面定义了RESTful API以及接口返回的状态码,接下来根据之前的接口定义先创建UserController,再实现用户管理模块的用户新增、用户修改、用户删除、用户查询等接口。

1)用户新增:

    @PostMapping(value = "user")
    public JSONResult save(@RequestBody User user) {
        System.out.println("用户创建成功:" + user.getName());
        return JSONResult.ok(201,"用户创建成功");
    }

@PostMapping注解表示此为POST接口。通过POST方法传入用户数据,然后调用Save方法保存用户数据。

2)用户修改:

    @PutMapping(value = "user")
    public JSONResult update(@RequestBody User user) {
        System.out.println("用户修改成功:" + user.getName());
        return JSONResult.ok(203,"用户修改成功");
    }

3)用户删除:

    @DeleteMapping(value = "user/{userId}")
    public JSONResult delete(@PathVariable String userId) {
        System.out.println("用户删除成功:" + userId);
        return JSONResult.ok(204,"用户删除成功");
    }

@DeleteMapping注解表示此为删除接口。通过传入参数userId删除人员信息。

4)获取用户:

    @GetMapping(value = "user/{userId}")
    public JSONResult queryUserById(@PathVariable String userId) {
        User user = new User();
        user.setUserId(userId);
        user.setName("zhang");
        user.setAge(20);
        System.out.println("获取用户成功:" + userId);
        return JSONResult.ok(200,"获取用户成功",user);
    }

@GetMapping注解表示此为查询接口。@PathVariable注解用于参数映射,获取传入的参数。

步骤03 验证测试。

至此,用户管理的模块接口都实现了。接下来验证接口调用。我们可以使用单元测试或者Postman工具调用用户管理模块的相关接口,测试接口是否正常。这里就以Postman工具演示RESTful API的测试。

打开Postman,使用POST方法请求/user接口,验证新增人员的接口是否正常,如图所示。

在这里插入图片描述
通过Postman发送POST请求,调用人员新增接口,后台接口处理成功后,返回人员信息保存成功。

接下来,使用GET方法请求/user/2001获取userId为2001的人员信息,从而验证获取人员的接口是否正常,如图所示。

在这里插入图片描述
通过Postman向后台接口发送GET方法请求/user/2001,RESTful API成功返回人员详细信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/67164.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

途乐证券-光伏、储能板块拉升 德业股份、固德威等大幅走高

光伏、储能等新能源板块10日盘中震荡上扬,截至发稿,德业股份涨近8%,锦浪科技、固德威、阿特斯等涨逾6%,禾迈股份、昱能科技涨近4%。 消息面上,据中关村储能产业技术联盟计算,2021年至2023年上半年&#xff…

rust关于项目结构包,Crate和mod和目录的组织

rust 最近开始学习rust语言。感觉这门语言相对java确实是难上很多。开几个文章把遇到的问题记录一下 rust关于包,Crate 关于包,Crate这块先看看官方书籍怎么说的 crate 是 Rust 在编译时最小的代码单位。如果你用 rustc 而不是 cargo 来编译一个文件…

Android 内存泄漏

名词解释 内存泄漏:即memory leak。是指内存空间使用完毕后无法被释放的现象,虽然Java有垃圾回收机制(GC),但是对于还保持着引用, 该内存不能再被分配使用,逻辑上却已经不会再用到的对象,垃圾回…

安装CUDA与CUDNN与Pytorch(最新超级详细图文版本2023年8月最新)

一、安装CUDA 1.1、下载安装包 cuda可以认为就是Nvidia为了显卡炼丹搞的一个软件,其下载地址为:CUDA Toolkit 12.2 Update 1 Downloads | NVIDIA Developer 当你点进这个链接的时候,你需要依次选择 1是选择系统,这里选windows…

Netty面试题1

计算机网络模型 OSI采用了分层的结构化技术,共分七层, 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 。 Open System Interconnect 简称OSI,是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参…

医疗保健中的 NLP:实体链接

一、说明 HEalthcare和生命科学行业产生大量数据,这些数据是由合规性和监管要求,记录保存,研究论文等驱动的。但随着数据量的增加,搜索用于研究目的的必要文件和文章以及数据结构成为一个更加复杂和耗时的过程。例如,如…

微信小程序中的分包使用介绍

一、分包的好处 可以优化小程序首次启动的下载时间 在多团队共同开发时可以更好的解耦协作 主包:放置默认启动页面/TabBar 页面,公共资源/JS 脚本 分包:根据开发者的配置进行划分 限制:所有分包大小不超过 20M,单…

无人驾驶实战-第十二课(强化学习自动驾驶系统)(完)

在七月算法上报了《无人驾驶实战》课程,老师讲的真好。好记性不如烂笔头,记录一下学习内容。 课程入口,感兴趣的也可以跟着学一下。 ————————————————————————————————————————— 强化学习&#xff…

php webshell 免杀入门

webshell 查杀软件: d盾、安全狗、护卫神、Sangfor WebShellKill 在线查杀 百度WEBDIR https://scanner.baidu.com 河马 https://www.shellpub.com cloudwalker牧云 https://webshellchop.chaitin.cn 查杀技术 静态检测、动态检测、日志检查 静态检查&#xff1a…

通用FIR滤波器的verilog实现(内有Lowpass、Hilbert参数生成示例)

众所周知,Matlab 中的 Filter Designer 可以直接生成 FIR 滤波器的 verilog 代码,可以方便地生成指定阶数、指定滤波器参数的高通、低通、带通滤波器,生成的 verilog 代码也可以指定输入输出信号的类型和位宽。然而其生成的代码实在算不上美观…

智能型静电消除器的优势有哪些?

智能型静电消除器是一种使用先进技术和智能控制系统来消除静电问题的设备。静电是由于电荷不平衡而引起的现象,常见于工业生产、医疗设备、办公环境等场合。静电的存在可能导致电子设备故障、火灾、等问题。 智能型静电消除器与传统静电消除器相比,具有以…

Python做一个绘图系统3:从文本文件导入数据并绘图

文章目录 导入数据文件对话框修改绘图逻辑源代码 Python绘图系统系列:将matplotlib嵌入到tkinter 简单的绘图系统 导入数据 单纯从作图的角度来说,更多情况是已经有了一组数据,然后需要将其绘制。这组数据可能是txt格式的,也可能…

uni-app:实现点击按钮,进行数据累加展示(解决数据过多,导致出错)

效果 代码 核心代码 一、标签显示 <!-- 加载更多 --> <view class"load_more" v-if"info.length > pageNum * pageSize" tap"loadMore">加载更多 </view> v-if"info.length > pageNum * pageSize"&#xf…

远景智能PMO负责人严晓婷受邀为第十二届中国PMO大会演讲嘉宾

上海远景科创智能科技有限公司PMO负责人严晓婷女士受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;能源物联网产品标准项目和非标准项目的并行管理。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1…

教雅川学缠论07-中枢实战众泰汽车000980

本文实战众泰汽车 下面是2023年11月14-2023年8月8众泰汽车日K图 先画日K 接下来处理包含&#xff0c;就变成下面这个样子 下面在套上缠论的理论&#xff0c;未来股价的走势应该是红色椭圆形虚线里面的样子 好了&#xff0c;文章就到这里&#xff0c;如果众泰最终不是这个走势…

网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(四)对战模块

网页版Java&#xff08;Spring/Spring Boot/Spring MVC&#xff09;五子棋项目&#xff08;四&#xff09;对战模块 一、约定前后端交互接口1. 建立连接接口2. 针对落子的请求和响应 二、实现前端页面三、实现后端1. 当用户进入房间&#xff0c;更新用户状态 OnlineUserManager…

W5500-EVB-PICO作为TCP Client 进行数据回环测试(五)

前言 上一章我们用W5500-EVB-PICO开发板通过DNS解析www.baidu.com&#xff08;百度域名&#xff09;成功得到其IP地址&#xff0c;那么本章我们将用我们的开发板作为客户端去连接服务器&#xff0c;并做数据回环测试&#xff1a;收到服务器发送的数据&#xff0c;并回传给服务器…

FFmpeg 编码详细流程

介绍 FFmpeg的 libavcodec 模块完成音视频多媒体的编解码模块。FFmpeg 本身不具有音视频编码的功能和底层能力&#xff0c;只是对各类第三方的编码器API 进行封装调用。老版本的 FFmpeg 将avcodec_encode_video2()作为视频的解码函数 API&#xff0c;将avcodec_encode_audio2(…

IO模型-信号驱动IO

linux内核中存在一个信号SIGIO&#xff0c;这个信号就是用于实现信号驱动IO的。当应用程序中想要以信号驱动IO的模型读写硬件数据时&#xff0c;首先注册一个SIGIO信号的信号处理函数,当硬件数据就绪&#xff0c;硬件会发起一个中断&#xff0c;在硬件的中断处理函数中向当前进…