概述

RESTful 是一种架构风格,任何符合 RESTful 风格的架构,我们都可以称之为 RESTful 架构。我们常说的 RESTful Api 是符合 RESTful 原则和约束的 HTTP 协议的Web 接口,需要注意的是它和 HTTP 协议并非绑定关系。我的个人理解就是:通过HTTP协议不同请求方法(GET、POST、PUT、Patch,DELETE)来判断如何操作统一命名的资源,并且通过不同的响应码来知道执行的状态。

关于 RESTful API 具体详细介绍,我推荐阅读下面 3 篇博客:
API设计:https://docs.microsoft.com/en-us/azure/architecture/best-practices/api-design By MicroSoft Azure
RESTful API设计:让您的用户满意的13个最佳实践:https://blog.florimond.dev/restful-api-design-13-best-practices-to-make-your-users-happy By Florimond Manca
RESTful API 最佳实践:http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html By 阮一峰

正如 RESTful API设计:让您的用户满意的13个最佳实践中所说:I have no authority to say that the following practices comply 100% with the holy REST principles (if there is such a thing!).
我没有权力说下面的做法100%符合神圣的REST原则(如果有这样的话!)。
我也不敢保证我的这篇文章绝对符合 REST ,但是我会尽最大努力向 REST 靠拢。

文中为了快速展示前台 RESTful 使用操作,所以示例并没有对接数据库,示例代码只是写死的逻辑返回。后期文章会将这个洞补上。

本文代码示例是在 SpringBoot 上进行操作的,如果你不会搭建SprignBoot项目可以查看我关于 SpringBoot 2 快速搭建 3 篇总结:
玩转SpringBoot 2 快速搭建 | Spring Initializr 篇
玩转 SpringBoot 2 快速搭建 | SpringToolSuite 篇
玩转 SpringBoot 2 快速搭建 | IntellJ IDEA篇

示例程序环境版本:
SpringBoot Version:2.1.0.RELEASE
SpringMVC Version:5.1.2RELEASE
Maven Version:3.2.5
JDK Version:1.8.0_144

实战

用户 Model 的代码:

下面是用户的 Model 类,用户类里面包含用户名称和用户年龄 2 个成员变量。

  1. package cn.lijunkui.springbootlearn.restful.model;
  2. public class User {
  3. private String name;
  4. private Integer age;
  5. //省略get and set 方法
  6. }

用户接口 Controller 类:

  1. @RestController()
  2. @RequestMapping("/user")
  3. public class UserController {
  4. Logger log = LoggerFactory.getLogger(UserController.class);
  5. /**
  6. * 根据用户id 查询用户
  7. * @return
  8. */
  9. @GetMapping("/{id}")
  10. public ResponseEntity<User> get(@PathVariable(name = "id") Long id){
  11. User user = new User("lijunkui",18);
  12. log.info("查询用户成功:"+"id:{}",id);
  13. return ResponseEntity.ok(user);
  14. }
  15. /**
  16. * 查询所有的用户
  17. * @return
  18. */
  19. @GetMapping("/")
  20. public ResponseEntity<List<User>> getAll(){
  21. List<User> userList = new ArrayList<User>(){{
  22. add(new User("lijunkui1",18));
  23. add(new User("lijunkui2",18));
  24. add(new User("lijunkui3",18));
  25. }};
  26. return ResponseEntity.ok(userList);
  27. }
  28. /**
  29. * 添加用户
  30. */
  31. @PostMapping("/")
  32. public ResponseEntity<User> add(@RequestBody User user){
  33. log.info("添加用户成功:"+"name:{},age:{}",user.getName(),user.getAge());
  34. return ResponseEntity.status(HttpStatus.CREATED).body(user);
  35. }
  36. /**
  37. * 更新用户
  38. * @param user
  39. * @return
  40. */
  41. @PutMapping("/")
  42. public ResponseEntity<Void> updatePut(@RequestBody User user){
  43. log.info("修改用户成功:"+"name:{},age:{}",user.getName(),user.getAge());
  44. return ResponseEntity.ok().build();
  45. }
  46. /**
  47. * 局部更新
  48. * @return
  49. */
  50. @PatchMapping("/{name}")
  51. public ResponseEntity<Void> updatePatch(@PathVariable("name") String name){
  52. log.info("修改用户成功:"+"name:{}",name);
  53. return ResponseEntity.ok().build();
  54. }
  55. /**
  56. * 删除用户
  57. */
  58. @DeleteMapping("/{id}")
  59. public ResponseEntity<Void> delete(@PathVariable("id") Long id){
  60. log.info("删除用户成功:"+"id:{}",id);
  61. return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
  62. }
  63. }

@RestController():声明在 Controller 上,表明该 Controller 为 RestFul 风格的Controller。

该注解在 Spirng 4.0 中也同样适用,但是在SpringMVC 3.0 中我们需要通过@Controller 和
@ResponseBody 来达到 @RestController()的效果。

@GetMapping():声明使用 Get 方式访问的接口,该方式主要用于数据查询。

@PostMapping():声明使用 Post方式访问的接口,该方式主要用于数据新增。

@PutMapping():声明使用 Put方式访问的接口,该方式主要用于全部更新。

@PatchMapping():声明使用 Patch方式访问的接口,该方式主要用于局部更新。

@DeleteMapping():声明使用 Delete 方式访问的接口,该方式主要用于数据删除。

对于@GetMapping() 和 @PostMapping() == @RequestMapping(value = "",method
= RequestMethod.GET) @RequestMapping(value = "",method = RequestMethod.POST) 。

ResponseEntity :用于封装响应回客户端数据和响应状态码的。常用用法如下:

ResponseEntity.ok().build():表示无返回数据,并且响应状态码是 200
ResponseEntity.ok(user):表示有回数据,并且响应状态码是 200
ResponseEntity.status(HttpStatus.NO_CONTENT).build():表示无返回数据,并且响应状态码是 204
ResponseEntity.status(HttpStatus.CREATED).body(user):表示有返回数据,并且响应状态码是 201

@PutMaping() BUG

Put 方式接受不到参数问可以通过配置 HttpPutFormContentFilter 来解决。具体处理代码如下:

  1. /**
  2. * 解决restFul put 参数无法接收的问题
  3. */
  4. @Component
  5. public class PutFilter extends HttpPutFormContentFilter {
  6. }

参考文献:HTTPS://www.aliyun.com/jiaocheng/852091.html

测试

RESTful 接口测试是通过 PostMan 来进行演示的,你也可以选择你顺手的工具进行测试哈。

根据用户id 查询用户:选择 GET 调用方式,然后在地址栏输入: localhost:8080/sbe/user/1 最后点击 Send。如下图所示成功返回用户信息和200 响应码。

查询所有的用户:选择 GET 调用方式,地址栏输入 localhost:8080/sbe/user/。

添加用户:选择 POST 调用方式,地址栏输入 localhost:8080/sbe/user/ 。选择Body -- JSON(application/json) 输入要添加用户json 信息。如下图所示:

修改用户: 选择 PUT 调用方式,地址栏输入 localhost:8080/sbe/user/ 。选择Body -- JSON(application/json) 输入要修改用户json 信息。如下图所示:

修改用户:选择 Patch 调用方式,地址栏输 localhost:8080/sbe/user/你想要修改的名称。如下图所示:

删除用户:选择 DELETE 调用方式,地址栏输入: localhost:8080/sbe/user/1。如下图所示:

小结

SpringBoot 开发 RESTful Api 还是比较简单的,将 Controller 通过 @RestController 声明后 在通过具体的动作Mapping注解 + ResponseEntity 定义返回数据和响应的状态码 基本就可以搞定。如果你没有操作过,建议跟着博客敲一遍哈。

代码示例

本文具体代码可以查看我的 GitHub 仓库 springbootexamples 中模块名为 spring-boot-2.x-restful-api 的 cn.lijunkui.restful.basic包下进行查看

Github:https://github.com/zhuoqianmingyue/springbootexamples 如果您对这些感兴趣,欢迎 点个赞或者关注给予支持!

玩转 SpringBoot 2 快速搭建 | RESTful Api 篇的更多相关文章

  1. 玩转SpringBoot 2 快速搭建 | Spring Initializr 篇

    SpringBoot 为我们提供了外网 Spring Initializr 网页版来帮助我们快速搭建 SpringBoot 项目,如果你不想用 IDEA 中的插件,这种方式也是不错的选择.闲话少说,直 ...

  2. 玩转 SpringBoot 2 快速搭建 | IntellJ IDEA篇

     IntellJ IDEA 介绍  IntelliJ IDEA 简称 IDEA,目前被认为是最好用的开发Java 语言开发工具之一.不过是收费的.和其同类型的工具有 Eclipse 和 MyEclip ...

  3. 玩转 SpringBoot 2 快速搭建 | Spring Tool Suite篇

    Spring Tool Suite (STS) 工具介绍 我个人比较推荐使用 Spring Tool Suite(STS),之所以推荐使用 Spring Tool Suite(STS) ,是因为它是 ...

  4. 使用 Beego 搭建 Restful API 项目

    1 环境准备 首先你需要在你的环境安装以下软件: go:编程语言运行环境 git:版本控制工具 beego:go 语言流行的开发框架 bee:beego 配套的快速搭建工具 你喜欢的数据库:这里以 M ...

  5. Spring Boot入门系列(二十)快速打造Restful API 接口

    spring boot入门系列文章已经写到第二十篇,前面我们讲了spring boot的基础入门的内容,也介绍了spring boot 整合mybatis,整合redis.整合Thymeleaf 模板 ...

  6. 使用CodeIgniter框架搭建RESTful API服务

    使用CodeIgniter框架搭建RESTful API服务 发表于 2014-07-12   |   分类于 翻译笔记   |   6条评论 在2011年8月的时候,我写了一篇博客<使用Cod ...

  7. SpringBoot使用Swagger2实现Restful API

    很多时候,我们需要创建一个接口项目用来数据调转,其中不包含任何业务逻辑,比如我们公司.这时我们就需要实现一个具有Restful API的接口项目. 本文介绍springboot使用swagger2实现 ...

  8. 玩转 SpringBoot 2 快速整合 | 丝袜哥(Swagger)

    概述 首先让我引用 Swagger 官方的介绍: Design is the foundation of your API development. Swagger makes API design ...

  9. 搭建RESTful API 之 实现WSGI服务的URL映射

    javarestfull 搭建参考 http://blog.csdn.net/hejias/article/details/47424511 问题引出:对于一个稍具规模的网站来说,实现的功能不可能通过 ...

随机推荐

  1. 【Demo 1】基于object_detection API的行人检测 2:数据制作

    项目文件结构 因为目录太多又太杂,而且数据格式对路径有要求,先把文件目录放出来.(博主目录结构并不规范) 1.根目录下的models为克隆下来的项目.2.pedestrian_data目录下的路径以及 ...

  2. LeetCode: 3 无重复字符的最长子串 (Java)

    3. 无重复字符的最长子串 https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 最初始的解 ...

  3. 腾讯企业邮箱 POP3/SMTP 设置

    下午魅族MX2刷完机,原先配置的公司邮箱还要重新配置.有些地方需要改,找到了篇文章,如下: 腾讯企业邮箱支持通过客户端进行邮件管理.POP3/SMTP协议收发邮件服务器地址分别如下.接收邮件服务器:p ...

  4. Unity经典游戏教程之:贪吃蛇

    版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...

  5. main方法中注入Spring bean

    在有些情况下需要使用main使用Spring bean,但是main方法启动并没有托管给Spring管理,会导致bean失败,报空指针异常. 可以使用 ClassPathXmlApplicationC ...

  6. 洛谷P3572题解

    这道题实在是一道 毒瘤 题,太坑爹了.那个写 \(deque\) 的题解亲测只有80分,原因 不言而明 ,这道题居然 丧心病狂 到 卡STL . 好了,不吐槽了,进入正题 题目分析: 这是一道十分 简 ...

  7. 渐进式web应用开发---Service Worker 与页面通信(七)

    _ 阅读目录 一:页面窗口向 service worker 通信 二:service worker 向所有打开的窗口页面通信 三:service worker 向特定的窗口通信 四:学习 Messag ...

  8. 映射&集合

    哈希函数 通过哈希表可以实现 O(1) 复杂度的查找. 哈希函数构造方法:设计好的哈希函数的两个基本原则,计算简单+分布均匀 1. 直接定址法 用key自身的某个线性函数来定址,f(key) = a* ...

  9. 什么时候使用redis?什么时候使用memcache?

    要清楚为什么,redis具有高可用特性,并且可固化,但特性有时候不能成为选择他的理由,一些业务场景中并不需要这样的特性.   什么时候倾向于选择redis? 1.复杂数据结构 value是哈希,列表, ...

  10. 2321. 【NOIP普及组T1】方程

    2321. [NOIP普及组T1]方程 时间限制: 1000 ms  空间限制: 262144 KB 题目描述