spring中的RESTFUL风格是什么?

2023-11-03

什么是RestFul风格:

RestFul是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的一种代码编写风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

来源:

REST 来自于Roy Thomas Fielding 2000年的博士论文 - 《Architectural Styles and the Design of Network-based Software Architectures》

实现机制:

restful风格实现的机制有多种,常见的有RPC和基于web的服务

请求方式:

在Restful风格中,用户发起请求的发送方式有:get,post,delete,put…等方式对请求的处理方法进行区分,这样可以在前后台分离式的开发中使得前端开发人员不会对请求的资源地址产生混淆和大量的检查方法名的麻烦,形成一个统一的接口。

在Restful风格中,现有规定如下:

GET(SELECT):从服务器查询,可以在服务器通过请求的参数区分查询的方式。
POST(CREATE):在服务器新建一个资源,调用insert操作。
PUT(UPDATE):在服务器更新资源,调用update操作。
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。(目前jdk7未实现,tomcat7也不行)。
DELETE(DELETE):从服务器删除资源,调用delete语句。

restful和非restful的区别:

他会对url进行规范:

a) 非REST风格的url:localhost:8080/springmvc?name=小白&password=123;

b) REST风格的url:localhost:8080/springmvc/小白/123;

分析:

直观上看是不是比较简洁
看不懂:隐藏了参数名称,安全,防止被攻击
所有的url都可以当成是资源
对http的方法进行规范

a)不管是删除,添加,更新….使用的url都是一致,那么如果需要删除,就把http的方法设置删除delete

b) 控制器:通过判断http的方法来执行操作(增删改查)

目前这种做法还没有被广泛采用

代码实现:

     * 1.路径的变化:/hello_rest/{name}/{password}其中{}相当于可以添加的动态的参数,
     * 也可以将工程名写在后面:/{name}/{password}/hello_rest
     * 2.参数的写法:需要利用@PathVariable("name")来匹配上面的参数,这样才可以取到值
     * 3.至于@PathVariable后面跟的形参你就可以随便命名了
     * @param username
     * @param password
     * @return
     */
    @RequestMapping(value = "/hello_rest/{name}/{password}")
    //@RequestMapping(value = "/{name}/{password}/hello_rest")
    public String hello_rest(@PathVariable("name") String username,
            @PathVariable("password") String password) {
        if("admin".equals(username)&"123".equals(password)){
            System.out.println("登录成功");
            return "hello";
        }
        return "hello";
    }

访问路径:localhost:8080/工程名/hello_rest/xx/xx(其中xx就是你随便填写的内容,它会匹配到后台的name和password的值)

比如:

你输入的路径是:localhost:8080/工程名/hello_rest/小白/admin

后台会匹配到:name=“小白”,password=“admin”

SpringBoot 中使用 RESTful

使用到的注解:

@Controller:修饰class,用来创建处理http请求的对象
@RestController:Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。
@RequestMapping:配置url映射,在Spring 4.3 之后,为了更好的支持 RESTful 风格,增加了几个注解:@PutMapping、@GetMapping、@DeleteMapping、@PostMapping,其实也就是将 method 属性的值与 @RequestMapping 进行了绑定而已。
下面我们尝试使用Spring MVC来实现一组对User对象操作的RESTful API,配合注释详细说明在Spring MVC中如何映射HTTP请求、如何传参。
在这里插入图片描述

public class User { 
 
    private Long id; 
    private String name; 
    private Integer age; 
 
    // 省略setter和getter 
     
}
 
@RestController 
@RequestMapping(value="/users")     // 通过这里配置使下面的映射都在/users下 
public class UserController { 
 
    // 创建线程安全的Map 
    static Map<Long, User> users = Collections.synchronizedMap(new HashMap<Long, User>()); 
 
   // @RequestMapping(value="/", method=RequestMethod.GET) 
    @GetMapping("/")
    public List<User> getUserList() { 
        // 处理"/users/"的GET请求,用来获取用户列表 
        // 还可以通过@RequestParam从页面中传递参数来进行查询条件或者翻页信息的传递 
        List<User> r = new ArrayList<User>(users.values()); 
        return r; 
    } 
 
    //@RequestMapping(value="/", method=RequestMethod.POST) 
    @PostMapping("/")
    public String postUser(@ModelAttribute User user) { 
        // 处理"/users/"的POST请求,用来创建User 
        // 除了@ModelAttribute绑定参数之外,还可以通过@RequestParam从页面中传递参数 
        users.put(user.getId(), user); 
        return "success"; 
    } 
 
    //@RequestMapping(value="/{id}", method=RequestMethod.GET) 
    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) { 
        // 处理"/users/{id}"的GET请求,用来获取url中id值的User信息 
        // url中的id可通过@PathVariable绑定到函数的参数中 
        return users.get(id); 
    } 
 
    //@RequestMapping(value="/{id}", method=RequestMethod.PUT) 
    @PutMapping("/{id}")
    public String putUser(@PathVariable Long id, @ModelAttribute User user) { 
        // 处理"/users/{id}"的PUT请求,用来更新User信息 
        User u = users.get(id); 
        u.setName(user.getName()); 
        u.setAge(user.getAge()); 
        users.put(id, u); 
        return "success"; 
    } 
 
    //@RequestMapping(value="/{id}", method=RequestMethod.DELETE) 
    @DeleteMapping("/{id}")
    public String deleteUser(@PathVariable Long id) { 
        // 处理"/users/{id}"的DELETE请求,用来删除User 
        users.remove(id); 
        return "success"; 
    } 
 
}

总结

我们通过创建User实体类,再来实现对实体类对象的操作接口,使用@PutMapping、@GetMapping、@DeleteMapping、@PostMapping这四个注解来完成对@RequestMapping 和method属性值的绑定(这是Spring 4.3 之后,为了更好的支持 RESTful 风格,增加了几个注解),并且通过 @PathVariable 注解来将 HTTP 请求中的属性绑定到我们指定的形参上。

这样,在开发的过程中我们就可以使用统一的接口地址,传递不同的参数配合不同的请求方式即可实现不同的方法调用,实现不同的功能,怎么样?是不是更简洁,更安全了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring中的RESTFUL风格是什么? 的相关文章

随机推荐

  • 用户交易数据分析 - 投资绩效归因分析-Brision模型

    1 模型介绍 通过业绩归因 能够更加清楚组合的收益究竟来源于什么 进而知道这种获取超额收益的能力是否能够持续 也能够明白组合发生剧烈波动的原因 从而改进策略 Brision模型中 将组合的收益分四部分 选股收益 在资产类别 或板块 内部 超
  • spring boot 之JPA详解

    JPA参考文档 JPA详解 jpa之分页 本地sql查询 注意表名啥的都用数据库中的名称 适用于特定数据库的查询 public interface UserRepository extends JpaRepository
  • Qt 槽机制:public slots 和 private slots

    今天在写Qt图片浏览器的时候 遇到了一个问题 Qt的界面是对的 但是功能却怎么也实现不了 点击开始按钮 无法显示打开文件夹的对话框 开始以为是信号连接或者是函数写错了 检查了好久都不知道问题在哪 最后 对着书上的代码一行行研究 才发现问题在
  • k8s第二节 Kubernetes入门、安装、创建Deployment、Service、pod调度 污点taint

    一 k8s的集群架构与组件 k8s也是一个Master 多个node节点 下面是kubernetes结婚的架构与组件 1 1 master组件介绍 组件名称 介绍 kube apiserver Kubernetes API 集群的统一入口
  • cgo+gSoap+onvif学习总结:2、wsl编译安装gSoap

    cgo gSoap onvif学习总结 2 wsl编译安装gSoap 文章目录 cgo gSoap onvif学习总结 2 wsl编译安装gSoap 1 前言 2 gSoap编译安装 wsl环境编译安装 3 最后 1 前言 结合官网安装教程
  • 用VB制作一个AI聊天机器人(001)

    从现在开始 我们要用VB做一款聊天机器人 材料 VB6 0 准备 拉出2个text控件 一个command控件 代码可以这样写 仅供参考 Private Sub Command1 Click If InStr LCase Text1 Tex
  • 简单聊一聊磁珠,电感和0R电阻

    磁珠 磁珠的材料是铁镁或铁镍合金 一般这些材料具有有很高的电阻率和磁导率 在高频率和高阻抗下 电感内线圈之间的电容值会最小 磁珠通常只适用于高频电路 因为在低频时 它们基本上是保有电感的完整特性 包含有电阻性和电抗性分量 因此会造成线路上的
  • 腾讯云16核服务器配置大全_16核CPU型号性能测评

    腾讯云16核CPU服务器有哪些配置可以选择 可以选择标准型S6 标准型SA3 计算型C6或标准型S5等 目前标准型S5云服务器有优惠活动 性价比高 计算型C6云服务器16核性能更高 轻量16核32G28M带宽优惠价3468元15个月 腾讯云
  • 在Vim中配置C++环境和插件

    介绍 本文章讲述了如何用coc nvim来安装coc clang插件 和如何安装前置要求 clangd npm nodejs 并配置 vimrc文件和clangd路径来让vim可以autofill cpp 目录 介绍 1 配置 vimrc
  • nc命令介绍

    一 简介 nc是netcat的简写 被用作一个简单 可靠的网络工具 二 作用 实现任意TCP UDP端口的侦听 nc可以作为server以TCP或UDP方式侦听指定端口 端口的扫描 nc可以作为client发起TCP或UDP连接 机器之间传
  • C++ Char操作

    C Char操作 1 字符处理函数 isalpha ch 如果ch是一个字母 返回非 int 0值 否则 返回 int 0 isalnum 判断是否是字母或者数字字符 isdigit 判断是否是数字字符 0 9 islower 判断是否是小
  • CentOS 查看系统版本和位数

    查看系统版本 方法一 cat etc redhat release 方法二 cat proc version 方法三 uname a 查看系统位数 64 or 32 方法一 getconf LONG BIT 方法二 file bin ls
  • Windows——Active Directory域服务安装与测试

    实验原理 在Windows server 2008 上安装域并创建域用户 将Win7加入到该域中 然后用域账户登录以及用Win7本地账户登录Win7 实验环境 Windows server 2008 域控制器 Win7 加入域的PC 在开始
  • Java线程:新特征-障碍器

    本文转载至 http lavasoft blog 51cto com 62575 222738 Java5中 添加了障碍器类 为了适应一种新的设计需求 比如一个大型的任务 常常需要分配好多子任务去执行 只有当所有子任务都执行完成时候 才能执
  • 多线程面试题摘选

    多线程面试题摘选 一 概念性问答题 1 线程的基本概念 线程的基本状态及状态之间的关系 答 线程是指在程序执行过程中 能够执行程序代码的一个执行单位 每个程序至少都有一个线程 也就是程序本身 java线程的基本状态 运行 就绪 挂起 结束
  • 无人机轨迹学习问题

    无人机轨迹学习 路径跟踪方案 个人总结 1 强化学习 建立一种奖励机制 它最符合人类的学习机制 学习一个最优策略 policy 可以让本体 agent 在特定环境 environment 中 根据当前的状态 state 做出行动 actio
  • ctf.show web2

    单引号无回显也无报错 or 1 1 有回显 order by测试也没特殊回显好像必须要带入sql函数才能回显 直接进行union select 1 查看当前数据库名称 1 or 1 1 union select 1 database 3 l
  • 并发编程系列之Exchanger

    前言 上面我们介绍了信号量 再来说说交换者 这个东西用的不是很多 所以一般也不被经常关注 但是我们还是最好了解下 下面我将从什么是Exchanger以及如何使用Exchanger两个方面谈谈这个用于线程间协调的工具类 什么是Exchange
  • uni-app—从安装到卸载

    uni app 从安装到卸载 简介 uni app官网 uni app 是一个使用 Vue js 开发所有前端应用的框架 开发者编写一套代码 可发布到iOS Android Web 响应式 以及各种小程序 微信 支付宝 百度 头条 QQ 钉
  • spring中的RESTFUL风格是什么?

    什么是RestFul风格 RestFul是一种软件架构风格 设计风格 而不是标准 只是提供了一组设计原则和约束条件 它主要用于客户端和服务器交互类的一种代码编写风格 基于这个风格设计的软件可以更简洁 更有层次 更易于实现缓存等机制 来源 R