Spring Boot 2.x (十):构建优雅的RESTful接口
RESTful
相信在座的各位对于RESTful都是略有耳闻,那么RESTful到底是什么呢?
REST(Representational State Transfer)表述性状态转移是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful。需要注意的是,REST是设计风格而不是标准。REST通常基于使用HTTP,URI,和XML(标准通用标记语言下的一个子集)以及HTML(标准通用标记语言下的一个应用)这些现有的广泛流行的协议和标准。
也许这段话有些晦涩难懂,换个角度我们来解释一下RESTful。
首先来看一组例子:
//查询所有人员(传统)
localhost:8088/api/user/findAll 请求方式:GET
//查询所有人员(RESTful)
localhost:8088/api/users	请求方式:GET
//修改人员(传统)
localhost:8088/api/user/update 请求方式:POST
//修改人员(RESTful)
localhost:8088/api/users	请求方式:PUT
//添加人员(传统)
localhost:8088/api/user/add	请求方式:POST
//添加人员(RESTful)
localhost:8088/api/users	请求方式:POST
//删除人员(传统)
localhost:8088/api/user/delete	请求方式:DELETE
//删除人员(RESTful)
localhost:8088/api/users	请求方式:DELETE
我们通常称地址栏中输入的地址为URI(Uniform Resource Identifier),翻译成中文就是统一资源标识符。
资源,我们在浏览器页面上看到的东西都可以称之为资源,比如图片,文字,语音等等。
而URI就是用于定位这些资源的位置的,RESTful风格的接口中只出现了表示资源的名词,关于这个资源的操作,通过HTTP内置的几种请求类型来区分。同一个路径localhost:8088/api/users,因为请求方式的不同,而去找寻不同的接口,完成对资源状态的转变。
总结一下,REST就是指对同一个URI的资源的不同请求方式(GET,POST,PUT,DELETE)(表述)下的做出的不同的操作(查,增,改,删),改变的是资源的状态,即表述性状态转移。 一个符合REST风格的URI就可以称之一个RESTful的接口。
看到这里,相信RESTful已经了解的差不多了,下面我们来看看在Spring Boot中如何去使用
SpringMVC 构建RESTful接口
SpringMVC中给我们提供了一些注解,可以帮助我们去构建RESTful的接口,下面来直接看代码:
package indi.viyoung.viboot.restful.controller;
import indi.viyoung.viboot.restful.entity.User;
import indi.viyoung.viboot.restful.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author viyoung
 * @since 2019-01-23
 */
@RestController
@RequestMapping("/users")
@Slf4j
@CrossOrigin
public class UserController {
    @Autowired
    private UserService userService;
    @GetMapping
    public List<User> get() {
        log.info("GET方法执行。。。");
        return userService.list();
    }
    @GetMapping(value = "/{id}")
    public User get(@PathVariable String id) {
        log.info("GET..{}...方法执行。。。",id);
        return userService.getById(id);
    }
    @PostMapping
    public void post() {
        log.info("POST方法执行。。。");
    }
    @PutMapping
    public void put() {
        log.info("PUT方法执行。。。");
    }
    @DeleteMapping
    public void delete() {
        log.info("DELETE方法执行。。。");
    }
}
这里的工程创建可以参照Spring Boot 2.x(五):Mybatis-Plus + Spring Boot。
下面我们也许需要一个前端的工程或者POSTMAN等测试接口的工具来发送不同的请求,我这里已经写好了一个前端的基于vue的工程,有需要的可以去下载一下:viboot-front。记得顺手点个star哟~

依次点击这五个按钮,可以看到后台的控制台分别打印出了不同的语句:

原创文章,才疏学浅,如有不对之处,万望告知!
公众号

您的推荐就是对我最大的支持!
Spring Boot 2.x (十):构建优雅的RESTful接口的更多相关文章
- Spring Boot中使用Swagger2构建强大的RESTful API文档
		由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ... 
- Spring Boot 中使用 Swagger2 构建强大的 RESTful API 文档
		项目现状:由于前后端分离,没有很好的前后端合作工具. 由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型.HTTP头部信息.HTTP请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下 ... 
- Spring Boot中使用Swagger2构建强大的RESTful(最新全,无坑)
		1:说明 网上这类文章 太多, 一搜一大把 ,但是要不是知识太过于老旧,就是配置没有说名清楚,你的项目按照他的配置却不能正常运行: 所以本文的目的: 配置swagger 2 那swagger 1 不 ... 
- Spring Boot 系列(七)Swagger2-生成RESTful接口文档
		Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集成到服 ... 
- springboot集成swagger2,构建优雅的Restful API
		swagger,中文“拽”的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试.另外swagger很容易构建restful风格的api,简单优雅 ... 
- (转)第十一篇:springboot集成swagger2,构建优雅的Restful API
		声明:本部分内容均转自于方志明博友的博客,因为本人很喜欢他的博客,所以一直在学习,转载仅是记录和分享,若也有喜欢的人的话,可以去他的博客首页看:http://blog.csdn.net/forezp/ ... 
- (转) SpringBoot非官方教程 | 第十一篇:springboot集成swagger2,构建优雅的Restful API
		swagger,中文“拽”的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试.另外swagger很容易构建restful风格的api,简单优雅 ... 
- SpringBoot非官方教程 | 第十一篇:springboot集成swagger2,构建优雅的Restful API
		转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-swagger2/ 本文出自方志朋的博客 swa ... 
- spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求
		spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求 有半年多没有更新了,按照常规剧本,应该会说项目很忙,工作很忙,没空更新,吧啦吧啦,相关的话吧, 但是细想想 ... 
随机推荐
- python学习:字符串
			字符串 #字符串操作# 对应操作:# 1.重复输出字符串# print('hello'*2)# 2.[],[:]通过索引获取字符串中字符,这里和列表的切片操作是相同的,具体内容见列表#print('h ... 
- 针对Oracle用户被锁的一些相关处理方法
			当登录时被告知XXX用户被锁时,可进行以下操作: 1.用拥有dba权限的用户登录,进行解锁,先设置具体时间格式,方便后面查看被锁的具体时间: SQL> alter session set nls ... 
- vue-router的学习
			一.路由的概述. vue-router是vue.js官方的路由插件,它和vue.js是深度集成的,适用于构建单页面.vue的单页面应用是基于路由和组件的,路由是用于设定访问路径,并将路径和组件映射起来 ... 
- atx-agent  minicap、minitouch源码分析
			项目描述: 因为公司需要,特别研究了一下openatx系列手机群控源码 源码地址: https://github.com/openatx 该项目主要以go语言来编写服务端.集成 OpenSTF中核心组 ... 
- Floyd算法解决多源最短路问题
			说好的写dijkstra 算法堆优化版本的,但是因为,妹子需要,我还是先把Floyd算法写一下吧!啦啦啦! 咳咳,还是说正事吧! ----------------------------------- ... 
- Golang Go Go Go part2:变量及常量声明
			三.关键字及内置预声明常量.类型.函数 1.关键字 Go有25个关键字,只能用在语法允许的地方,不能作为名称使用,它们是: break default func ... 
- Unity进阶----DoTween及工程文件夹的建立(2018/11/12)
			DoTween 仅介绍部分常用用法,代码参上:(其它操作见官网:http://dotween.demigiant.com/documentation.php) using System.Collect ... 
- QEMU KVM Libvirt手册(11): Managing Storage
			When managing a VM Guest on the VM Host Server itself, it is possible to access the complete file sy ... 
- [Swift]LeetCode861. 翻转矩阵后的得分 | Score After Flipping Matrix
			We have a two dimensional matrix A where each value is 0 or 1. A move consists of choosing any row o ... 
- (转)iOS学习——UIlabel设置行间距和字间距
			在iOS开发中经常会用到UIlabel来展示一些文字性的内容,但是默认的文字排版会觉得有些挤,为了更美观也更易于阅读我们可以通过某些方法将UIlabel的行间距和字间距按照需要调节. 比如一个Labe ... 
