spring boot入门系列文章已经写到第二十篇,前面我们讲了spring boot的基础入门的内容,也介绍了spring boot 整合mybatis,整合redis、整合Thymeleaf 模板引擎 等各种框架,同时也介绍了使用jdbcTemplate 操作数据库,配置多数据源 等系列内容。应该说spring boot 常用的功能基本上都覆盖到了。接下来说一说spring boot 比较实用的项目级的功能。首先会介绍spring boot 如何快速打造Restful API接口。

随着互联网化等逐渐深入,应用系统也变得越来越复杂,系统架构正在朝着微服务化,中台化的方向发展。这就需要各个系统、各个厂家之间的数据频繁交互。所以,使用 Restful 风格构建的应用接口适用于移动互联网厂商的业务场景,正在被越来越多的企业推荐使用。那么什么是 RESTful 呢?

一、什么是 RESTful

RESTful 是目前最流行的互联网软件架构。 REST(Representational State Transfer,表述性状态转移)一词是由 Roy Thomas Fielding 在他 2000 年博士论文中提出的,定义了他对互联网软件的架构原则,如果一个架构符合 REST 原则,则称它为 RESTful 架构。

RESTful 把服务器端,所有的应用程序状态和功能定义为“资源”(Resource)。从 RESTful 的⻆度看,网络上的任何东西都是资源,它可以是一段文本、一张图片、一个服务等,每个资源都对应一个特定的 URI(统一资源定位符),并把它进行标示,访问这个 URI 就可以获得这个资源 。

资源可以有多种表现形式,也就是资源的“表述”(Representation),比如一张图片可以使用 JPEG 格式也可以使用 PNG 格式。 URI 只是代表了资源的实体,并不能代表它的表现形式。互联网中,客户端和服务端之间的互动传递的就是资源的表述,我们上网的过程,就是调用资源的 URI,获取它不同表现形式的过程。这种互动只能使用无状态协议 HTTP,也就是说,服务端必须保存所有的状态,客户端可以使用 HTTP 的几个基本操作,包括 GET(获取)、 POST(创建)、 PUT(更新)与DELETE(删除),使得服务端上的资源发“状态转化”(State Transfer),也就是所谓的“表述性状态转移” 。

Restful 相比于 SOAP 更加简单明了,它并没有一个明确的标准,而更像是一种设计的风格。

Restful 特点包括:
  1、每一个URI代表1种资源;
  2、客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;
  3、通过操作资源的表现形式来操作资源;
  4、资源的表现形式是XML或者HTML;
  5、客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。
 

二、Spring Boot 实现Restful 方案

Spring Boot 开发Restful j接口非常简单,通过不同的注解来支持前端的请求,除了经常使用的@RestController 注解外,Spring Boot 还提了一些组合注解。这些注解来帮助简化常用的 HTTP 方法的映射,并更好地表达被注解方法的语义 。

Srping Boot 提供了与Rest 操作方式(GET、POST、PUT、DELETE)对应的注解:

  1、@GetMapping,处理 Get 请求
  2、@PostMapping,处理 Post 请求
  3、@PutMapping,用于更新资源
  4、@DeleteMapping,处理删除请求
  5、@PatchMapping,用于更新部分资源

@PutMapping 主要是用来更新整个资源的,@PatchMapping 主要表示更新部分字段

之前我们也介绍过,Spring Boot 提供了专门做数据处理的控制器:@RestController ,其实这些注解就是我们使用的 @RequestMapping 的简写版本:@GetMapping 其实就等于@RequestMapping(value = "/xxx",method = RequestMethod.DELETE) 。

三、Spring Boot 快速实现Restful

如何创建Spring Boot 项目之前的文章里面都有,这里不在重复了。可以看我之前的系列文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html

1、设计接口

根据之前介绍的Restful 设计风格设计一组对用户操作的 RESTful API

  • /user         POST         创建用户
  • /user/id     GET            根据 id 获取用户信息
  • /user         PUT            更新用户
  • /user/id     DELETE     根据 id删除对应的用户

以上,就是对user操作的接口定义,在实际项目的Restful API 接口文档还会定义全部请求的数据结构体。

2、实现接口

首先创建UserController 控制器,定义之前设计的相关接口。

package com.weiz.controller;

import com.weiz.pojo.SysUser;
import com.weiz.service.UserService;
import com.weiz.utils.JSONResult;
import org.n3r.idworker.Sid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;

@RestController
@RequestMapping("/")
public class UserController {

@Autowired
private UserService userService;

@Autowired
private Sid sid;

@PostMapping(value = "user")
public JSONResult create() throws Exception {

String userId = sid.nextShort();
SysUser user = new SysUser();
user.setId(userId);
user.setUsername("spring boot" + new Date());
user.setNickname("spring boot" + new Date());
user.setPassword("abc123");
user.setIsDelete(0);
user.setRegistTime(new Date());

userService.saveUser(user);
return JSONResult.ok("保存成功");
}

@PutMapping(value = "user")
public JSONResult update() {
SysUser user = new SysUser();
user.setId("10011001");
user.setUsername("10011001-updated" + new Date());
user.setNickname("10011001-updated" + new Date());
user.setPassword("10011001-updated");
user.setIsDelete(0);
user.setRegistTime(new Date());
userService.updateUser(user);

return JSONResult.ok("保存成功");
}

@DeleteMapping("user/{userId}")
public JSONResult delete(@PathVariable String userId) {
userService.deleteUser(userId);
return JSONResult.ok("删除成功");
}

@GetMapping("user/{userId}")
public JSONResult queryUserById(@PathVariable String userId) {
return JSONResult.ok(userService.queryUserById(userId));
}

}

说明:

  1、@PathVariable 注解,用于参数映射。

  2、Rest需要注意请求的方式,可以看到PUT和POST的URL是相同的,但是后端处理逻辑不同,所以使用的时候千万别搞混了。

3、测试
实际开发测试的过程中,一般使用postman测试相关的接口。当然,也可以用单元测试来实现。这里简单起见,直接用postman来测试刚刚定义的人员操作接口。

创建人员:/user

根据 id 获取人员信息:/user/id

以上,测试了人员的创建和查询接口,其他接口的测试也是一样。

最后

以上,就把Spring Boot 实现Restful API 接口介绍完了。 Restful 是一种非常优雅的设计,采用RESTful 设计API之后 /user/api一个URL地址解决,前端一看就能明白。

这个系列课程的完整源码,也会提供给大家。大家关注我的微信公众号(架构师精进),回复:springboot源码。获取这个系列课程的完整源码。

Spring Boot入门系列(二十)快速打造Restful API 接口的更多相关文章

  1. Spring Boot入门系列(十六)使用pagehelper实现分页功能

    之前讲了Springboot整合Mybatis,然后介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.接下来要说一说Mybatis 的分页 ...

  2. Spring Boot入门系列(十四)使用JdbcTemplate操作数据库,配置多数据源!

    前面介绍了Spring Boot 中的整合Mybatis并实现增删改查.如何实现事物控制.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/c ...

  3. Spring Boot入门系列(十)如何使用拦截器,一学就会!

    前面介绍了Spring Boot 如何整合定时任务已经Spring Boot 如何创建异步任务,不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhon ...

  4. Spring Boot入门系列(十八)整合mybatis,使用注解的方式实现增删改查

    之前介绍了Spring Boot 整合mybatis 使用xml配置的方式实现增删改查,还介绍了自定义mapper 实现复杂多表关联查询.虽然目前 mybatis 使用xml 配置的方式 已经极大减轻 ...

  5. Spring Boot入门系列(十五)Spring Boot 开发环境热部署

    在实际的项目开发过中,当我们修改了某个java类文件时,需要手动重新编译.然后重新启动程序的,整个过程比较麻烦,特别是项目启动慢的时候,更是影响开发效率.其实Spring Boot的项目碰到这种情况, ...

  6. Spring Boot入门系列(十九)整合mybatis,使用注解实现动态Sql、参数传递等常用操作!

    前面介绍了Spring Boot 整合mybatis 使用注解的方式实现数据库操作,介绍了如何自动生成注解版的mapper 和pojo类. 接下来介绍使用mybatis 常用注解以及如何传参数等数据库 ...

  7. Spring Boot 入门系列(二十二)使用Swagger2构建 RESTful API文档

    前面介绍了如何Spring Boot 快速打造Restful API 接口,也介绍了如何优雅的实现 Api 版本控制,不清楚的可以看我之前的文章:https://www.cnblogs.com/zha ...

  8. Spring Boot入门系列(二十一)如何优雅的设计 Restful API 接口版本号,实现 API 版本控制!

    前面介绍了Spring Boot 如何快速实现Restful api 接口,并以人员信息为例,设计了一套操作人员信息的接口.不清楚的可以看之前的文章:https://www.cnblogs.com/z ...

  9. Spring Boot入门系列(十七)整合Mybatis,创建自定义mapper 实现多表关联查询!

    之前讲了Springboot整合Mybatis,介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.mybatis 插件自动生成的mappe ...

随机推荐

  1. css实例——“旋转”太极八卦图

    话不多说,直接上代码: HTML代码部分: <!DOCTYPE html> <html> <head> <meta charset="utf-8&q ...

  2. idea中右击的快捷键都找不到 Diagrams

    今天突然发现了一件很恐怖的事情,那就是我的IDEA的右击中找不到Diagrams了,因为我是用这个东西打开 .bpmn文件生成png的,突然没了.. 说一下解决吧 在FIle -> settin ...

  3. Java实现文件夹下文件实时监控

    一.commons-io方法 1.使用Commons-io的monitor下的相关类可以处理对文件进行监控,它采用的是观察者模式来实现的 (1)可以监控文件夹的创建.删除和修改 (2)可以监控文件的创 ...

  4. js 向上滚屏

    <!doctype html><html><head><meta charset="utf-8"><title>< ...

  5. oracle之二redo日志

    redo 日志 4.1 redo (重做) log 的功能:数据recovery4.2 redo log 特征:     1)记录数据库的变化(DML.DDL)     2)用于数据块的recover ...

  6. swift基本数据类型使用-数组使用

    目录 数组的使用 1.数组的定义 2.对可变数组的基本操作 3.数组的遍历 4.数组的合并 5. 示例 数组的使用 1.数组的定义 1> 定义不可变数组 2> 定义可变数组 2.对可变数组 ...

  7. 第0课 - 搭建开发环境之安装QT

    第0课 - 搭建开发环境之安装Qt 1. 课程学习的原材料 — Visual Studio 2010 — Qt SDK 4.7.4 — Qt Creator 2.4.1 2. Visual Studi ...

  8. Gradle实战(01)--介绍与安装

    前言 本章你将学习到 Gradle的介绍 Gradle的安装 Gradle的hello world 1 Gradle的介绍 Gradle是专注于灵活性和性能的开源构建自动化工具 Gradle构建脚本是 ...

  9. elasticsearch 索引清理脚本及常用命令

    elastic索引日志清理不及时,很容易产生磁盘紧张,官网给出curl -k -XDELETE可以清理不需要的索引日志. 清理脚本 #!/bin/bash #Author: 648403020@qq. ...

  10. 突发!美商务部宣布封禁微信,TikTok——面对科技封锁,如何应对

    刚刚美国商务部忽然发布了这则新闻,为了回应特朗普2020年8月6号的行政令,称这些应用程序存在安全威胁. 禁令中称,自2020年9月20日起,美国政府将: 1 禁止通过美国在线移动应用程序商店分发或维 ...