RESTful

RESTful

每一个实体就是一个资源,也可以说是一个具体信息,每一个资源都有一个特定的url(传统资源定位符)

表现层

资源是一种信息实体,,它可以有多种外在表现形式,我们把资源呈现出来的形式叫做“表现层”

url值代表资源的实体,不代表形式.

HTTP请求头信息中,用Accept(期望)和content-type字段指定对表现层的描述

状态转化

http是无状态协议,所有状态都保存在服务器端,如果客户端要操作服务器,必须让服务器发生“形态转化”

  • 新增:从无到有 状态的变化
  • 更新:从某个状态变成另外一种状态的转化
  • 删除:从有到无 状态的变化

7个HTTP方法

  • GET 从服务器取出资源(一项或多项)
  • POST 在服务器新建一个资源
  • PUT 在服务器更新资源(客户端提供改变后的完整资源) PUT更新整个对象 user
  • DELETE 在服务器更新资源(客户端提供改变的属性)
  • PATCH 从服务器删除资源
  • HEAD 获得一个资源的元数据,比如一个资源的hash值或者最后修改日期
  • OPTIONS 获得客户端针对一个资源能够实施的操作;(获取该资源的api(能够对资源做什么操作的描述)
    HTTP头信息(可自定义) content-type
    HTTP响应状态代码(可自定义)
    这些就是HTTP1.1协议提供的统一接口

请求头

1.一个API可以允许返回JSON,Xml甚至HTML等文档格式;建议使用json;
2.以前通过URL来规定获取得格式类型,比如
https://api.example.com/employee.json;
https://api.example.com/employee.html等;

但是更建议使用Accept这个请求头;

Accept与Content-Type的区别

1.Accept属于请求头, Content-Type属于实体头。
Http报头分为通用报头,请求报头,响应报头和实体报头。
请求方的http报头结构:通用报头|请求报头|实体报头
响应方的http报头结构:通用报头|响应报头|实体报头

2.Accept代表发送端(客户端)希望接受的数据类型。
比如:Accept:application/json;
代表客户端希望接受的数据类型是json类型,后台返回json数据

Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型
比如:Content-Type:application/json;
代表发送端发送的数据格式是json, 后台就要以这种格式来接收前端发过来的数据.

二者合起来,
Accept:application/json;
Content-Type:application/json;
即代表希望接受的数据类型是json格式,本次请求发送的数据的数据格式也是json格式.

注解

@RequestMapping的属性

  • value/path:映射路径
  • method:限定请求的方式,枚举:GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
  • params:限定要处理请求的参数,只有匹配该参数的请求,才会被该方法处理
  • headers:限定要处理请求的请求头信息,只有匹配该请求头内容的请求,才会被该方法处理
  • consumes消费: 指定处理请求的提交内容类型
  • produces生产: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回.方法仅处理request请求中Accept头中包含了”application/json”的请求,同时暗示了返回的内容类型为application/json.

@PathVariable参数别名

@RestController相当于@Controller所有的方法自动添加上@ResponseBody

@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容.

比如说:application/json或者是application/xml等,一般情况下来说常用其来处理application/json类型

通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上