REST:Representational State Transfer,表现层资源状态转移
(1)资源
资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、数据库中的一张表等等具体的东西,可以将资源设计的要多抽象有多抽象,只要想象力允许而且客户端应用开发者能够理解。与面向对象设计类似,资源是以名词为核心来组织的,首先关注的是名词,一个资源可以由一个或多个URI来标识。URI既是资源的名称,也是资源在web上的地址,对某个资源感兴趣的客户端应用,可以通过资源的URI来与其进行交互。
(2)资源的表述
资源的表述是一段对于资源在某个特定时刻的状态的描述,可以在客户端-服务器端之间转移(交换)。资源的表述可以有多种格式,例如HTML/XML/JSON/纯文本/图片/视频/音频等等。资源的表述格式可以通过协商机制来确定。请求:响应方式的表述通常使用不同的格式。
(3)状态转移
状态转移说明的是:在客户端和服务器端之间转移(transfer)代表资源状态的表述,通过转移和操作资源的表述,来间接实现操作资源的目的。
具体说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE
它们分别对应四种基本操作:GET 用来获取资源、POST 用来新建资源、PUT 用来更新资源、DELETE 用来删除资源
REST风格提倡URL地址使用统一的风格设计,从前到后各个单词使用/分开,不使用问号键值对方式携带请求参数,而是将要发送给服务器的数据作为URL地址的一部分,以保证整体风格的一致性。
操作 传统方式 REST风格 查询操作 getUserById?id=1 user/1-->get请求方式 保存操作 saveUser user-->post请求方式 删除操作 deleteUser?id=1 user/1-->delete请求方式 更新操作 updateUser user-->put请求方式 ?前面是地址,?后面是数据
目前从浏览器发送的请求只有GET和POST.
rest风格就是面向我们当前服务器中的资源来进行访问,我们要把我们当前要访问的这些资源以名词的方式来设置到我们的路径中,在路径中表示我们当前要访问的资源。同时要把我们需要传输的数据然后也作为路径的一部分,然后拼接在咱们的路径中,设置在咱们的路径中就可以啦。
我们的示例如下所示:
此时的网址就是一个rest风格的路径
此时我们再进行搜索一个java进行查看路径的变化:
此时的item这个路径是没有发生变化的。此时访问的服务器中的同一个资源,路径是一样的,只是当前传输过来的数据是不一样的。
我们首先新建一个模块,我们的依赖如下所示: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.rgf</groupId> <artifactId>spring_MVC_helloWorld</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!--SpringMVC--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.1</version> </dependency> <!--日志--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <!--ServletAPI--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!--Spring和Thymeleaf整合包--> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring5</artifactId> <version>3.0.12.RELEASE</version> </dependency> </dependencies> </project>
之后我们进行添加Maven工程的web模块:
我们进行配置文件如下所示: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/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!--设置Spring的编码过滤器--> <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>