zoukankan      html  css  js  c++  java
  • Rest(表述性状态转移)

    本文的主要内容有:

    1.了解Rest

    2.了解RESTful WebService

    3.使用SpringMvc实现RESTful

    ------------------------------我是华丽的分割线,下面是正文--------------------------------------------------

    1,REST是什么

    a,出身:由Roy Thomas Fielding博士于2000年提出

    b,全称:Representational state Transfer,称为表象化状态转变,或者表述性状态转移

    c,REST是Web服务的一种架构风格

    d,使用HTTP、URI等广泛流行的标准和协议

    e,轻量级、跨平台、跨语言的架构设计

    那么,从上面5点总结来看,REST到底是个什么鬼呢?好了,下面要注意了,重点来了:REST是一种设计风格,它既不是一种标准,也不是一种软件,而是一种思想。它通常使用HTTP、URI和XML、json以及HTML这些现有的流行的协议和标准

    2,我们来介绍RESTful是什么?

    a,RESTful对应中文是REST式的

    b,RESTful WebService 是一种常见的REST的应用,是遵守REST风格以及Web风格的Web服务

    c,REST式的Web服务是一种ROA((Resource-Oriented Architecture,面向资源架构)

    2.1REST架构的主要原则

    a,网络上的所有资源都可以被抽象为资源(Resource)

    b,每个资源都有一个唯一的资源标识符(Resource identifier)

    c,同一资源具有多种表现形式,例如xml,json

    d,对资源的各种操作不会改变资源的标识符

    e,所有的操作都是无状态的(stateless)[无状态:HTTP是无状态协议。无状态是指协议对于事务处理没有记忆能力,如果后续需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大]

    f,符合REST原则的架构方式均可被称为RESTful

    2.2REST对资源的操作

    举例 http://example.com/users/

    -GET:表示获取一个资源

    -POST:表示创建一个新的资源

    -PUT:表示修改一个资源的状态

    -DELETE:表示删除一个资源

    资源展现:-XML    -JSON

    在这里我们回忆一下之前是怎么操作的呢:

    http://example.com/users/query/1  GET 表示根据用户id查询用户数据

    http://example.com/users/save POST表示新增用户

    http://example.com/users/update POST修改用户用户信息

    http://example.com/users/delete GET/POST 表示删除用户

    请看RESTful的操作

    http://example.com/users/1 GET表示根据用户id查询用户信息

    http://example.com/users  POST表示新增用户信息

    http://example.com/users  PUT 表示修改用户信息

    http://example.com/users  DELETE表示删除用户信息

    注意:在RESTful请求的路径上,没有资源操作的动词,资源操作的描述

    2.3REST接口定义

    clip_image002

    2.4REST接口设计

    首先介绍URL的组成

    -网路协议,这里包含http、https

    -服务器地址

    -接口名称

    -?参数列表

    其次URL定义限定

    -不要使用大写字母

    -使用中线-代替下划线——

    -参数列表应该被encode过

    2.5响应设计

    ContentBody仅仅用来传输数据

    数据要做到拿来就用的原则,不需要“拆箱”的过程

    用来描述数据或者请求的元数据放Header,例如x-Result-Fields

    响应示例

    clip_image002[7]

    2.6指定响应的属性字段

    无状态服务器应该允许客户端对数据按需提取,在请求头使用x-result-fields指定数据返回的字段集合

    例如:trade有trade_id,trade_name,created_at三个属性,客户端只需其中的trade_id,trade_name两个属性

    Request Header

    X-Result-Fields:trade_id,trade_name

    2.7http常用的响应状态码

    200 操作成功

    201 对象创建成功

    204 操作成功,但是没有响应体

    404 资源不存在

    500 后台代码错误,服务器内部错误

    clip_image002[11]

    3.SpringMVC实现RESTful服务
    SpringMVC原生态的支持REST风格的架构的设计

    所涉及到注解:

    -@RequestMapping

    -@PathVariable

    -@ResponseBody

    ………

    3.1查询资源

    clip_image002[13]

    3.2新增资源

    clip_image002[15]

    3.3 更新资源

    clip_image002[17]

    默认情况下,PUT请求是无法提交表单数据的,需要在web.xml中添加过滤器解决:

    <!-- 解决PUT请求无法提交表单数据的问题 -->

    <filter>

    <filter-name>HttpMethodFilter</filter-name>

    <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>

    </filter>

    <filter-mapping>

    <filter-name>HttpMethodFilter</filter-name>

    <url-pattern>/*</url-pattern>

    </filter-mapping>

    3.4删除资源

    clip_image002[19]

    需要在web.xml中添加过滤器解决DELETE请求无法提交表单数据的问题:

    注意:表单提交的时候,仍然是Post 请求,但是需要多一个请求参数 _method=DELETE

    <!--

    将POST请求转化为DELETE或者是PUT

    要用_method指定真正的请求参数

    -->

    <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>

  • 相关阅读:
    display:block;inline;inline-block大总结
    img图片inline-block总结
    定时器
    获取样式
    UmiJS
    vue 点击当前路由重新加载该路由
    Support for the experimental syntax 'decorators-legacy' isn't currently enab -- 装饰器@
    js 改变匹配到的字符串的颜色
    with
    页面从输入 URL 到页面加载显示完成
  • 原文地址:https://www.cnblogs.com/lizhaowen/p/6027816.html
Copyright © 2011-2022 走看看