【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成功返回人员详细信息。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ThinkPHP6企业OA办公系统

有需要请加文章底部Q哦 可远程调试 ThinkPHP6企业OA办公系统 一 介绍 勾股OA基于ThinkPHP6开发,前端Layui,数据库mysql,是一款实用的企业办公系统。可多角色登录,集成了系统设置、人事管理、消息管理、审批管理、日常办公、客户…

解决Qt的列表加载大量数据卡顿的问题

问题概述 本人在使用QListView插入大量数据时,界面卡顿十分严重。数据量大概只有上千左右,但是每个Item的内容比较多。当数据不停地插入一段时间后,卡顿到鼠标的移动都有点困难。 解决思路 QListView是典型的MVC思想的产物。界面呈现出来的数…

python——案例11:数值交换

案例11:数值交换xinput(输入一个数值赋值给x:) yinput(输入一个数值赋值给y:)tempx #创建临时变量,以此变量为基础进行逐次交换 xy ytemp print(交换后的X的值是:{}.format(x)) # print(交换后的Y的值是:{}.format(y)) #

RabbitMQ学习——发布订阅/fanout模式 topic模式 rabbitmq回调确认 延迟队列(死信)设计

目录 引出点对点(simple)Work queues 一对多发布订阅/fanout模式以登陆验证码为例pom文件导包application.yml文件rabbitmq的配置生产者生成验证码,发送给交换机消费者消费验证码 topic模式配置类增加配置生产者发送信息进行发送控制台查看 rabbitmq回调确认配置类验…

Flutter:屏幕适配

flutter_screenutil flutter_screenutil是一个用于在Flutter应用程序中进行屏幕适配的工具包。它旨在帮助开发者在不同屏幕尺寸和密度的设备上创建响应式的UI布局。 flutter_screenutil提供了一些用于处理尺寸和间距的方法,使得开发者可以根据设备的屏幕尺寸和密度…

Spring(11) Bean的生命周期

目录 一、简介二、Bean的流程1.BeanDefinition2.Bean 的生命周期 三、代码验证1.User 实体类2.MyBeanPostProcessor 后置处理器3.SpringConfig 扫描包配置4.UserTest 测试类5.测试结果6.模拟AOP增强 三、总结 一、简介 首先,为什么要学习 Spring 中 Bean 的生命周期…

C++项目:在线五子棋对战网页版--session管理模块开发

session 在WEB开发中,HTTP协议是⼀种⽆状态短链接的协议,这就导致⼀个客⼾端连接到服务器上之后,服务器不知道当前的连接对应的是哪个用户,也不知道客⼾端是否登录成功,这时候为客⼾端提所有服务是不合理的。因此&am…

Golang bitset 基本使用

安装: go get github.com/bits-and-blooms/bitset下面代码把fmtx换成fmt就行 //------------基本操作------------//构建一个64bit长度的bitsetb : bitset.New(64)//放入一个数b.Set(10)fmtx.Println("add-10:", b.DumpAsBits()) // 0000000…

MyBatisX自动和数据库的字段关联

先下个插件 右键数据库,点MybatisX-Generator 在根据自己需求勾选 actual column:保证数据库的驼峰命名生效

idea模板的使用(配置xml文件模板)

1. 问题的引出 我们在日常项目中可以发现,sql映射文件和mybatis主配置文件,以及application.yml文件中有很多固定不变的内容,为了方面使用,所以可以把这些xml文件设置为模板 2. 创建模板的步骤 按照图片一步一步进行即可 点击…

JavaScript之事件的转控、反控、函数式编程

文章目录 效果图htmlJavaScript解析 效果图 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>函…

基于亚奈奎斯特采样和SOMP算法的平板脉冲响应空间插值matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...................................................................... %fine regular gr…