读懂RESTful风格
RESTful就是资源定位和资源操作的风格。不是标准也不是协议。
REST即Representational State Transfer的缩写,可译为"表现层状态转化”。RESTful最大的特点为:资源、统一接口、URI和无状态。
这种风格设计的软件,可以更简洁,更有层次,更易于实现缓存等机制。
特点
资源:互联网所有的事务都可以被抽象为资源,例如:.txt .html .jpg .mp3 .mp4等
RESTful 架构风格是围绕资源展开的,资源操作都是统一接口的:
- GET(SELECT):从服务器取出资源(一项或多项)。
- POST(CREATE):在服务器新建一个资源。
- PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
- PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)。
- DELETE(DELETE):从服务器删除资源。
URI:每一个URI(统一资源定位符)指向一个特定的资源。通过URI来访问资源。最典型的URI就是URL。@RequestMapping的path/value属性表示的就是URL的一部分。
无状态:
所有的资源,都可以通过URI定位,而且这个定位与其他资源无关。例如无需登录就可以通过URL查看,就是无状态。需要登录才能查看,是有状态。
实现
1、RESTful风格url
RESTful:http://localhost:8080/h2/1/11
@PathVariable
用于修饰方法传入参数,表示该参数值从请求路径中获取
@RequestMapping("h2/{a}/{b}")
/{a}/{b}:表示要传入的参数值,在请求url中用斜线/分隔多个参数。
@Controller
public class RESTfulController {
//传统方式:http://localhost:8080/h1?a=1&b=11
@RequestMapping("h1")
public String test1(int a, int b , Model model){
int rslt=a+b;
model.addAttribute("msg", "结果为:"+rslt);
return "hello";
}
//RESTful:http://localhost:8080/h2/1/11
@RequestMapping("h2/{a}/{b}")
public String test2(@PathVariable int a, @PathVariable int b , Model model){
int rslt=a+b;
model.addAttribute("msg", "结果为:"+rslt);
return "hello";
}
}
2、url不变,使用method属性区分
- @RequestMapping的请求路径用value或path属性表示
- @RequestMapping的method属性表示请求方式,例如:POST、GET等。
@RequestMapping(value = "h3/{a}/{b}",method = RequestMethod.GET)
public String test3(@PathVariable int a, @PathVariable int b , Model model){
int rslt=a+b;
model.addAttribute("msg", "get结果为:"+rslt);
return "hello";
}
@RequestMapping(value = "h3/{a}/{b}",method = RequestMethod.POST)
public String test4(@PathVariable int a, @PathVariable int b , Model model){
int rslt=a+b;
model.addAttribute("msg", "post结果为:"+rslt);
return "hello";
}
请求路径都为http://localhost:8080/h3/1/11
- 默认为GET方式请求,走入method为get的分支

- 使用表单提交POST请求
点击提交后,走入method为post的分支


3、使用@GetMapping、@PostMapping
等价于指定了请求方式的@RequestMapping
- @GetMapping:@RequestMapping(method = RequestMethod.GET)的快捷方式
- @PostMapping:@RequestMapping(method = RequestMethod.POST)的快捷方式
@GetMapping("h3/{a}/{b}")
public String test5(@PathVariable int a, @PathVariable int b , Model model){
int rslt=a+b;
model.addAttribute("msg", "get结果为:"+rslt);
return "hello";
}
@PostMapping( "h3/{a}/{b}")
public String test6(@PathVariable int a, @PathVariable int b , Model model){
int rslt=a+b;
model.addAttribute("msg", "post结果为:"+rslt);
return "hello";
}
RESTful风格优点
使请求路径变得更加简洁
传递、获取参数值更加方便,框架会自动进行类型转换
通过路径变量@PathVariable的类型,可以约束访问参数。
- 若参数值与定义类型不匹配,则访问不到对应的方法,报错400错误的请求。
安全,请求路径中直接传递参数值,并用斜线/分隔,不会暴露传递给方法的参数变量名。
高效,更易于缓存的实现,让响应更加高效。
RESTful风格简洁,高效,安全,成为了web service开发的标配。
读懂RESTful风格的更多相关文章
- 一文读懂RESTful架构
转载自https://zhuanlan.zhihu.com/p/381554129 RESTful架构究竟是什么 别着急,想要了解RESTful,我们先来了解一位大佬Roy Thomas Fieldi ...
- Spring Boot 中 10 行代码构建 RESTful 风格应用
RESTful ,到现在相信已经没人不知道这个东西了吧!关于 RESTful 的概念,我这里就不做过多介绍了,传统的 Struts 对 RESTful 支持不够友好 ,但是 SpringMVC 对于 ...
- kubernetes基础——一文读懂k8s
容器 容器与虚拟机对比图(左边为容器.右边为虚拟机) 容器技术是虚拟化技术的一种,以Docker为例,Docker利用Linux的LXC(LinuX Containers)技术.CGroup(Co ...
- Spring Boot2 系列教程(三十一)Spring Boot 构建 RESTful 风格应用
RESTful ,到现在相信已经没人不知道这个东西了吧!关于 RESTful 的概念,我这里就不做过多介绍了,传统的 Struts 对 RESTful 支持不够友好 ,但是 SpringMVC 对于 ...
- 这次我让你彻底弄懂 RESTful
微信搜 「yes的练级攻略」干货满满,不然来掐我,回复[123]一份20W字的算法刷题笔记等你来领.欢迎分享,转载请保留出处. 本文已收录至 https://github.com/yessimida/ ...
- SpringBoot实战(一)之构建RestFul风格
RestFul风格是一种非常流行的架构风格,相关实战可以参考我的这篇博客:SSM框架之RestFul示例 论文可参考:https://www.ics.uci.edu/~fielding/pubs/di ...
- Restful风格到底是什么?怎么应用到我们的项目中?
rest越来越流行,感觉挺高大尚的.网上看了很多网友的说法,各有各的看法,我觉得很多说得很有道理. 说法一 restful风格,就是一种面向资源服务的API设计方式,它不是规范,不是标准,它一种设计模 ...
- 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?
本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享. 1.引言 Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡 ...
- 一片非常有趣的文章 三分钟读懂TT猫分布式、微服务和集群之路
原文http://www.cnblogs.com/smallSevens/p/7501932.html#3782600 三分钟读懂TT猫分布式.微服务和集群之路 针对新手入门的普及,有过大型网站技 ...
随机推荐
- DedeCMS程序使用拼音首字母做栏目名称的方法
Dedecms织梦程序默认使用拼音为保存目录的时候使用的是中文全拼,当遇到栏目名称比较长的时候目录名称看起来有点冗长,这时候大多数站长喜欢使用拼音首字母作为栏目的保存目录,那么就需要修改 dede/c ...
- MySQL 中的自增主键
MySQL 的主键可以是自增的,那么如果在断电重启后新增的值还会延续断电前的自增值吗?自增值默认为1,那么可不可以改变呢?下面就说一下 MySQL 的自增值. 特点 保存策略 1.如果存储引擎是 My ...
- 基于线段树的RMQ
RMQ(Range Minimum/Maximum Query)区间最值查询,即给出长度为n的数组A,以及m组询问s.t(s<=t<=n),返回区间[s,t]中的最值. 基于线段树的方法实 ...
- HDU5691 Sitting in Line【状压DP】
HDU5691 Sitting in Line 题意: 给出\(n\)个数字,有些数字的位置固定了,现在要求把所有没固定的数字放在一个位置,使得任意相邻两个位置的数字的相乘的和最大 题解: \(n\) ...
- 使用eclipse写第一个Java_web的hello_world项目
1.先创建一个Java_web项目 如果你没有下载过Tomcat服务器,不会配置,建议看一下我得这一篇博客:https://www.cnblogs.com/kongbursi-2292702937/p ...
- hdu 6806 Equal Sentences 找规律
题意: 给你一个有n个单词的单词串S,对这n个单词进行排列组合形成新的一个单词串T,如果在S中任意某个单词所在位置,和这个单词在T中所在位置之差的绝对值小于等于1,那么就说S和T串相等 让你求S一共有 ...
- HDU3544 Alice's Game && POJ 2960 S-Nim(SG函数)
题意: 有一块xi*Yi的矩形巧克力,Alice只允许垂直分割巧克力,Bob只允许水平分割巧克力.具体来说,对于Alice,一块巧克力X i * Y i,只能分解成a * Y i和b * Y i其中a ...
- Pyqt5 安装
window 安装PyQt5 pip install pyqt5 pip install pyqt5-tools (安装常用的Qt工具) 添加环境变量 变量名: QT_QPA_PLATFORM_PL ...
- 踏上Revit二次开发之路 2 从“HelloWorld”入手
2 从"HelloWorld"入手 在欧特克的官方网页上有个叫<My First Plug-in Training>的项目,号称可以让一个完全没有编程基础的人照着做出一 ...
- 如何用 4 个小时搭建一个新 “Clubhouse” ,引爆声音社交新风口
Clubhouse,基于实时音频技术的声音社交现象级火爆 最近,让硅谷两位顶级 VC 大打出手争相投资的 Clubhouse 火到了国内,甚至在社交圈里 "一码难求",此种火爆程度 ...