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接口的更多相关文章

  1. Spring Boot中使用Swagger2构建强大的RESTful API文档

    由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ...

  2. Spring Boot 中使用 Swagger2 构建强大的 RESTful API 文档

    项目现状:由于前后端分离,没有很好的前后端合作工具. 由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型.HTTP头部信息.HTTP请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下 ...

  3. Spring Boot中使用Swagger2构建强大的RESTful(最新全,无坑)

    1:说明 网上这类文章 太多, 一搜一大把 ,但是要不是知识太过于老旧,就是配置没有说名清楚,你的项目按照他的配置却不能正常运行: 所以本文的目的: 配置swagger 2  那swagger 1 不 ...

  4. Spring Boot 系列(七)Swagger2-生成RESTful接口文档

    Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集成到服 ...

  5. springboot集成swagger2,构建优雅的Restful API

    swagger,中文“拽”的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试.另外swagger很容易构建restful风格的api,简单优雅 ...

  6. (转)第十一篇:springboot集成swagger2,构建优雅的Restful API

    声明:本部分内容均转自于方志明博友的博客,因为本人很喜欢他的博客,所以一直在学习,转载仅是记录和分享,若也有喜欢的人的话,可以去他的博客首页看:http://blog.csdn.net/forezp/ ...

  7. (转) SpringBoot非官方教程 | 第十一篇:springboot集成swagger2,构建优雅的Restful API

    swagger,中文“拽”的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试.另外swagger很容易构建restful风格的api,简单优雅 ...

  8. SpringBoot非官方教程 | 第十一篇:springboot集成swagger2,构建优雅的Restful API

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-swagger2/ 本文出自方志朋的博客 swa ...

  9. spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求

    spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求 有半年多没有更新了,按照常规剧本,应该会说项目很忙,工作很忙,没空更新,吧啦吧啦,相关的话吧, 但是细想想 ...

随机推荐

  1. vue路由传参的三种方式区别(params,query)

    最近在做一个项目涉及到列表到详情页的参数的传递,网上搜索一下路由传参,结合自己的写法找到一种适合自己的,不过也对三种写法都有了了解,在此记录一下 <ul class="table_in ...

  2. 正则匹配ts的引用

    ts文件引入代码如下: import { IView, GridView, Sizing as GridViewSizing, Box, IGridViewStyles } from './gridv ...

  3. IEnumerabl 和 IEnumertator

    public interface IEnumerable   {       IEnumerator GetEnumerator();   }   IEnumerator 接口 public inte ...

  4. Java语法细节 - 可见性

    目录 JAVA访问和修饰符的关系一览表 JAVA访问和修饰符的关系一览表 Modifier Class Package Subclass World public Y Y Y Y protected ...

  5. Hadoop集群搭建-full完全分布式(三)

    环境:Hadoop-2.8.5 .centos7.jdk1.8 一.步骤 1).4台centos虚拟机 2). 将hadoop配置修改为完全分布式 3). 启动完全分布式集群 4). 在完全分布式集群 ...

  6. 配置NFS固定端口

    NFS启动时会随机启动多个端口并向RPC注册,为了设置安全组以及iptables规则,需要设置NFS固定端口.NFS服务需要开启 mountd,nfs,nlockmgr,portmapper,rquo ...

  7. web测试实践——day01

    一.任务进展情况 主要是找寻网站的bug,分析bug的严重程度.同时找了本专业的同学进行博客园系统的使用. 二.存在的问题 由于上线的网站做的比较完善,导致找寻bug比较困难. 三.解决方法 对此我们 ...

  8. 实战深度学习OpenCV(二):读取并播放本地或者摄像头的视频

    一.读取并播放的代码如下: #include "pch.h" #include <iostream> #include <opencv2/core/core.hp ...

  9. Trie树详解及其应用

    一.知识简介        最近在看字符串算法了,其中字典树.AC自动机和后缀树的应用是最广泛的了,下面将会重点介绍下这几个算法的应用.      字典树(Trie)可以保存一些字符串->值的对 ...

  10. [Swift]LeetCode102. 二叉树的层次遍历 | Binary Tree Level Order Traversal

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...