RESTful风格

目录

一、什么是RESTful

1.1 RESTFul对WEB服务接口的规定包括:

1.2 REST对请求方式的具体约束如下:

1.3 REST对URL的具体约束如下:

1.4 RESTFul的核心概念:

二、RESTful风格与传统方式对比

三、RESTful风格演示

3.1  查询所有

3.2 根据id查询用户信息 

3.2  添加用户信息

3.3 修改用户信息

3.4 根据id删除用户


一、什么是RESTful

RESTful是一种WEB服务接口的设计风格,它通过定义一系列的约束条件和规范,使得WEB服务接口更加简洁、易于理解、易于扩展以及安全可靠。RESTful的核心在于使用HTTP协议的本征特性来处理资源的状态转移。

1.1 RESTFul对WEB服务接口的规定包括:

  • URL格式:URL应该简洁且具有自描述性,反映资源的层次结构。
  • HTTP请求方法:严格遵循HTTP方法的语义,如GET用于查询,POST用于创建,PUT用于更新,DELETE用于删除。
  • 数据格式:请求和响应的数据格式通常为JSON或XML,这些格式易于机器解析和生成。
  • HTTP状态码:正确使用HTTP状态码来表示各种操作的结果,如200表示成功,404表示资源未找到。

1.2 REST对请求方式的具体约束如下:

  • 查询(GET):用于请求数据。
  • 新增(POST):用于提交新数据。
  • 修改(PUT):用于更新数据。
  • 删除(DELETE):用于删除数据。

1.3 REST对URL的具体约束如下:

  • 传统的URL可能包含方法名,如/springmvc/getUserById?id=1,而REST风格的URL则直接指向资源,如/springmvc/user/1
  • REST风格的URL通过不同的HTTP方法来区分操作,如使用GET来查询资源,使用DELETE来删除资源。

1.4 RESTFul的核心概念:

  • 表述性(Representational):指的是URI和请求方法的组合。
  • 状态(State):指的是服务器端的数据。
  • 转移(Transfer):指的是数据的变化。

表述性状态转移意味着通过URI和请求方法的组合来控制服务器端数据的变化。

二、RESTful风格与传统方式对比

RESTful URL与传统URL的主要区别在于,传统URL基于方法名进行资源访问和操作,而RESTful URL基于资源的结构和状态进行操作。以下是两者之间的具体区别:

从上表可以看出,传统URL基于动作,而RESTful URL基于资源和状态,因此RESTful URL更加清晰和易于理解。这也是REST架构风格被广泛使用的主要原因之一。RESTful风格的URL使得接口设计更加直观,易于维护和扩展,同时也提高了API的可用性和灵活性。

三、RESTful风格演示

环境准备:

pom.xml:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.qcby</groupId><artifactId>ParamSpringMVC1103</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><!-- 版本锁定 --><spring.version>5.0.2.RELEASE</spring.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency></dependencies></project>

web.xml: 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"metadata-complete="true"><!--配置前端控制器--><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--加载springmvc.xml配置文件,配置的是Spring配置--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!--配置启动加载--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><!--拦截所有请求--><url-pattern>/</url-pattern></servlet-mapping><!-- 配置过滤器,解决中文乱码的问题 --><filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><!-- 指定字符集 --><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--注册过滤器HiddenHttpMethodFilter--><filter><filter-name>HiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><filter-mapping><filter-name>HiddenHttpMethodFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>

springmvc.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置spring创建容器时要扫描的包 --><context:component-scan base-package="com.qcby"></context:component-scan><!-- 配置视图解析器 --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"></property><property name="suffix" value=".jsp"></property></bean><!-- 配置spring开启注解mvc的支持 --><mvc:annotation-driven/></beans>

RESTful规范规定,查询数据需要发送GET请求

3.1  查询所有

index.jsp:

<%--查询所有--%>
<a href="/user">get查询所有用户信息</a>

controller:

@GetMapping("/user")
public String findAll(){System.out.println("get查询所有用户信息");return "suc";
}

启动服务器进行测试:

3.2 根据id查询用户信息 

<!--根据id查询:GET-->
<a href="/user/123">get根据id查询用户信息</a>
@GetMapping("/user/{id}")
public String findById(@PathVariable("id") Integer id){System.out.println("get根据用户id查询用户信息:用户id是" + id);return "suc";
}

启动服务器进行测试:

3.2  添加用户信息

RESTful规范中规定,保存操作需要发送POST请求。 

<h3>post添加用户信息</h3>
<form action="/user" method="post"><input type="submit" value="保存">
</form><br>
@PostMapping("/user")
public String save(){System.out.println("post保存用户信息");return "suc";
}

启动服务器进行测试:

3.3 修改用户信息

RESTful规范中规定,如果要进行修改操作,需要发送POST请求。
如何发送PUT请求?
第一步:首先你必须是一个POST请求。
第二步:在发送POST请求的时候,提交这样的数据:_method=PUT。
第三步:在web.xml文件配置SpringMVC提供的过滤器:HiddenHttpMethodFilter。

<!--注册过滤器HiddenHttpMethodFilter-->
<filter><filter-name>HiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping><filter-name>HiddenHttpMethodFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

<%--put修改--%>
<h3>put修改用户信息</h3>
<form action="/user" method="post"><input type="hidden" name="_method" value="put">用户名:<input type="text" name="username">年龄:<input type="text" name="age"><input type="submit" value="修改">
</form>
@PutMapping("/user")
public String updateUser(@RequestParam("username") String username,@RequestParam("age") Integer age){System.out.println("put修改用户信息:用户名:" + username +",年龄:" + age);return "suc";
}

启动服务器进行测试:

3.4 根据id删除用户

<%--删除用户信息--%>
<h3>delete删除用户信息</h3>
<form action="/user" method="post"><input type="hidden" name="_method" value="delete">用户ID:<input type="text" name="id"><br><br><input type="submit" value="删除用户信息">
</form>
@DeleteMapping("/user")
public  String  deleteUser(@RequestParam("id") Integer id){System.out.println("delete删除用户信息:要删除的用户id是" + id);return "suc";
}

启动服务器进行测试:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/464482.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openapi回调地址请求不通过

目录 1. 验证url接口get请求本地自测报错 2. 测试回调模式成功不返回结果 3. 测试回调模式返回结果带双引号 对接企业微信 产生会话回调事件 接口问题解决 1. 验证url接口get请求本地自测报错 java.lang.IllegalArgumentException: Last encoded character (before the pa…

砥砺十年风雨路,向新而行创新程丨怿星科技十周年庆典回顾

10月24日&#xff0c;是一年中的第256天&#xff0c;也是程序员节&#xff0c;同时也是怿星的生日。2014年到2024年&#xff0c;年华似水匆匆一瞥&#xff0c;多少岁月轻描淡写&#xff0c;怿星人欢聚一堂&#xff0c;共同为怿星科技的十周年庆生&#xff01; 01.回忆往昔&…

C++:AVL树

目录 AVL树概念 AVL树的实现 AVL树的节点 AVL树的插入 AVL树的平衡调整 右单旋 左单旋 左右双旋 右左双旋 完整的插入函数 AVL树的查找 AVL树的验证 验证有序 验证平衡 完整代码 AVL树概念 AVL树是一种具有特殊性质的二叉搜索树&#xff0c;AVL树的左右子树也都…

Nginx线程模型

Nginx的线程模型具有其独特的设计特点&#xff0c;主要基于多进程和异步非阻塞的处理机制。以下是对Nginx线程模型的详细解析&#xff1a; 一、多进程模型 Nginx采用的是多进程模型&#xff0c;而非多线程模型。在这种模型中&#xff0c;Nginx会启动一个master进程和多个work…

【HTML】——VSCode 基本使用入门和常见操作

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 零&#xff1a;HTML开发工具VSCode的使用 1&#xff1a;创建项目 2&#xff1a;创建格式模板&#x…

【C/C++】【三种方法】模拟实现strlen

学习目标&#xff1a; 使用代码模拟实现strlen。 逻辑&#xff1a; strlen 需要输入一个字符串数组类型的变量&#xff0c;并且返回一个整型类型的数据。strlen 需要计算字符串数组有多少个元素。 代码1&#xff1a;使用计数器 #define _CRT_SECURE_NO_WARNINGS 1 #include&…

【双指针】【数之和】 LeetCode 633.平方数之和

算法思想&#xff1a; 双指针枚举i,j&#xff1b;类似三数之和 class Solution { public:bool judgeSquareSum(int c) {long long sum0;vector<int> dp;dp.push_back(0);long long start1;while(sum < c){sum start *start;if(sum>c) break;else dp.push_back(…

HarmonyOS Next星河版笔记--界面开发(3)

属性 1.1.设计资源-svg图标 需求&#xff1a;界面中展示图标→可以使用的svg图标(任意放大缩小不失真、可以改变颜色) 使用方式&#xff1a; ①设计师提供&#xff1a;基于项目的图标&#xff0c;拷贝到项目目录使用 Image($r(app.media.ic_dianpu)) .width(40) fillColor…

解决方案 | 部署更快,自动化程度高!TOSUN同星线控底盘解决方案

Tosun——线控底盘解决方案 在汽车智能化和电动化进程中&#xff0c;智能线控底盘相关的核心技术和产品成为了新能源汽车及智能驾驶产业的重点发展方向。同星智能作为行业先行者&#xff0c;精研汽车电子行业整体解决方案&#xff0c;提供基于TSMaster的底盘HIL仿真测试解决方…

分布式光伏管理办法

随着分布式光伏项目的不断增加&#xff0c;传统的管理方式已经难以满足高效、精准的管理需求。光伏业务管理系统作为一种集信息化、智能化于一体的管理工具&#xff0c;正在逐步成为分布式光伏项目管理的重要支撑。 光伏业务管理系统通过数字化手段实现对光伏业务全流程的精细化…

细腻的链接:C++ list 之美的解读

细腻的链接&#xff1a;C list 之美的解读 前言&#xff1a; 小编在前几日刚写过关于vector容器的内容&#xff0c;现在小编list容器也学了一大部分了&#xff0c;小编先提前说一下学这部分的感悟&#xff0c;这个部分是我学C以来第一次感到有难度的地方&#xff0c;特别是在…

文件操作案例

文件操作&#xff08;帮助小学生控诉妈妈&#xff09;:###无任何不良指导###

基于 RNN 的语言模型

基于 RNN 的语言模型 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一类网络连接中包含环路的 神经网络的总称。 给定一个序列&#xff0c;RNN 的环路用于将历史状态叠加到当前状态上。沿着时间维度&#xff0c;历史状态被循环累积&#xff0c;并作为…

嵌入式硬件工程师的职业发展规划

嵌入式硬件工程师可以按照以下阶段进行职业发展规划&#xff1a; 1. **初级阶段&#xff08;1-3 年&#xff09; ** - **技术学习与积累**&#xff1a; **电路基础强化**&#xff1a; 深入学习模拟电路和数字电路知识&#xff0c;能够熟练分析和设计基本的电路&#xff0c;…

C#:强大而优雅的编程语言

在当今的软件开发领域&#xff0c;C#作为一种广泛应用的编程语言&#xff0c;以其强大的功能、优雅的语法和丰富的生态系统&#xff0c;受到了众多开发者的喜爱。本文将深入探讨 C#的各个方面&#xff0c;展示它的魅力和优势。 一、C#的历史与发展 C#是由微软公司开发的一种面…

时间序列预测(十八)——实现配置管理和扩展命令行参数解析器

如图&#xff0c;这是一个main,py文件&#xff0c;在此代码中&#xff0c;最开始定义了许多模型参数&#xff0c;为了使项目更加灵活和可扩展&#xff0c;便于根据不同的需求调整参数和配置&#xff0c;可以根据实际需要扩展参数和配置项。 下面是如何实现配置管理和扩展命令行…

影刀RPA实战:嵌入python,如虎添翼

1. 影刀RPA与Python的关系 影刀RPA与Python的关系可以从以下几个方面来理解&#xff1a; 技术互补&#xff1a;影刀RPA是一种自动化工具&#xff0c;它允许用户通过图形化界面创建自动化流程&#xff0c;而Python是一种编程语言&#xff0c;常用于编写自动化脚本。影刀RPA可以…

GR2——在大规模视频数据集上预训练且机器人数据上微调,随后预测动作轨迹和视频(含GR1详解)

前言 上个月的24年10.9日&#xff0c;我在朋友圈看到字节发了个机器人大模型GR2&#xff0c;立马去看了下其论文(当然了&#xff0c;本质是个技术报告) 那天之后&#xff0c;我就一直想解读这个GR2来着 然&#xff0c;意外来了&#xff0c;如此文《OmniH2O——通用灵巧且可全…

Hive自定义函数—剔除周日周六(小时级别)

&#x1f431;背景&#x1f34e; Hello&#xff0c;小伙伴们&#xff0c;许久不见&#xff0c;最近遇到一个需求场景&#xff0c;关于物流时差的计算&#xff0c;要求算出差值是小时&#xff0c;且要剔除周日周六&#xff0c;网上很多文章&#xff0c;最好的也就是按照天剔除周…

C++中的继承——第二篇

一、继承与友元 友元关系不能够继承&#xff08;就像父亲的朋友不一定是自己的朋友&#xff09; 具体实现起来就是父类的友元可以访问父类的成员&#xff0c;但是不可以访问子类的成员 二、继承与静态成员 子类的静态成员变量本质上与父类的是同一份&#xff0c;存储在静态…