目录
一、什么是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";
}
启动服务器进行测试: