您的位置:首页 > 编程语言 > Java开发

SpringMVC(十一)Restful架构风格

2017-11-21 09:33 246 查看
什么是REST:

表述性状态转移,分布式超媒体软件的 一种架构风格

一套简单的设计原则,一种架构风格或(模式),不是一种具体的标准或架构

基于使用HTTP、URI等现有的广泛流行的协议和标准,并由几个核心抽象概念支撑。

一、资源:任何事物,只要有被引用的必要,就是一个资源(resource)。它可以是一个事物,也可以是一个抽象的概念。

二、表示:资源和表示不是一码事,web上获取的不是资源,而是资源的表示。

三、状态:在客户-服务端模式下,让客户端维护应用状态,并确保客户端向服务器发出的请求都包含理解请求所需的全部信息。

约束和风格:核心是架构以资源为核心的模型 优点:具有更好的扩展性

url表示资源

CRUD操作

状态表述转移

无状态服务

Http状态码

Cache控制

Proxy

关键原则:

1、为所有资源定义ID:

URI(统一资源定位符),URI构成了一个全局命名空间,使用URI标识的关键资源意味着它们获得了一个唯一、全局的ID。

总结:无论WEB中的资源代表单一数据项、数据项集合、虚拟或实际的对象还是计算结果等,都可以使用URI标识。

2、将所有资源链接在一起:

URI命名规格是全球标准,构成web的所有资源都可以互通通信。

总结:任何可能的情况下,使用连接指引可以被标识的资源。

3、使用标准方法

POST-Create GET-Read Put-Update DELETE-Delete

总结:为使客户端程序能与web中的的资源相互协议,资源应该正确地实现默认的应用协议(即HTTP协议),并使用协议标准的GET/PUT/POST/DELETE方法。

4、资源多重表示

总结:尽可能针对不同的需求提供资源多重表示

5、无状态通信

总结:要做到无状态通信往往需要一些重新设计-不能简单地将一些Session状态绑缚在URI上。

RESTful:符合REST约束风格和原则的应用程序或设计就是RESTfull

Spring对RESTful的支持:

@RequestMapping和@PathVariable注解,支持资源标识和URL映射

目前互联网公司越来越流行提供RESTful形式的API供第三方调用

Token认证机制:

RESTful提供的API是无状态的,即下一次调用请求与当前的调用请求时完全无关的,但这就

无法保证系统资源的安全性。

Token机制(令牌机制)就是用来解决无状态和安全性之间的矛盾。

原理如下:

1、用户发送用户名和密码(一般密码加密),请求通过验证

2、服务器判断用户名和密码是否正确

3、服务器通过,返回Token即过期时间

4、所有请求携带返回的Token在过期时间内即可通过Token验证并正常使用RESTful API(服务器验证Token时间过期,则无法正常使用RESTful,需要从新验证)

代码测试:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Rest架构风格页面请求</title>
</head>
<body>
<!-- 由于表单不知道Update提交方式,这里只能只能写post -->
<form action="/user/order/1234" method="post">
<!-- 隐藏域可以被HideenHttpMethodFilter过滤器处理,从而修改请求操作方法 -->
<inpt type="hidden" name="_method" value="put">
<input type="text" name="name"></br>
<input type="text" name="age"></br>
<input type="submit" value="提交">
</form>
</body>
</html>


<!-- 配置SpringMVC支持res架构风格过滤器 -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<servlet-name>SpingMVC</servlet-name>
</filter-mapping>


@Controller
public class RestfulAPIController {
@RequestMapping(value="/user/order/{id}",method=RequestMethod.PUT)
public String updateUserRestFulAPI(@PathVariable("id")String id,@RequestParam("name")String name) {
S
4000
ystem.out.println(id);
System.out.println(name);
return "";

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc 架构